Alex Merced
Posted on 9 abr • Updated on 15 abr
2022 ExpressJS Cheatsheet
#javascript #express
This article assumes basic knowledge of ExpressJS, if your new to Express I recommend starting
with the following Video Playlist:
ExpressJS Video Playlist
Creating a New Project
Assuming you have NodeJS installed just open up your IDE to an empty folder and do the
following in terminal:
Create a new node project npm init -y
install dependencies npm install express morgan dotenv
if you don't have nodemon installed globally, do so npm install -g nodemon
create your initial server file, gitignore and env file touch server.js .env .gitignore
put the following in the .gitignore file
.env
/node_modules
put the following in the .env file, this file is for defining variables you don't want in your code
and not in public view (api keys, database credentials, sensitive stuff) or variables that should
change depending on the context.
PORT=5000
package.json
Could of useful things we can do in the package.json:
We can add scripts, you can add as many as you like but here is basics I'd recommend.
"scripts: {
"start
start": "node
node server.js
server.js",
"dev
dev": "nodemon
nodemon server.js
server.js"
}
scripts can be run using the commands npm run <command name> for example we can run the dev
script with npm run dev .
We can also choose whether we will use commonjs or module syntax, commonjs will be the
default if we do nothing, but if we add "type":"module" to the package.json then we can use
module syntax. This effects how we import and export things.
Task CommonJS ES Module
Importing const something = import something from
Dependency/File require("something") "something"
Exporting from a file module.exports = something export default something
Which you prefer is your own preference, just be aware you may not be able to import JSON files
with ES Modules in older versions (or use ES Modules at all in really old versions) of node and
use an experimental flag to do so in newer versions.
Basic Server Setup
CommonJS Version
// bring in environment variables from a .env file
require("dotenv").config()
// import express and morgan
const express = require("express")
const morgan = require("morgan")
// create an application object
const app = express()
// define a PORT variable from the environment with a default value
const PORT = process.env.PORT || 4000
/////////////////////////////////////
// ALL YOUR MIDDLEWARE AND ROUTES GO HERE
app.use(morgan("tiny")) // middleware for logging
app.use(express.urlencoded({extended: true})) //middleware for parsing urlencoded data
app.use(express.json()) // middleware for parsing incoming json
app.use("/static", express.static("static")) // to set a folder for static file serving
/////////////////////////////////////
// Server Listener
app listen(PORT () > console log(`Listening on port ${PORT}`))
app.listen(PORT, () => console.log( Listening on port ${PORT} ))
ES Module Version
// Bring in environmental variables
import dotenv from "dotenv"
dotenv.config()
// import express and morgan
import express from "express"
import morgan from "morgan"
// create an application object
const app = express()
// define a PORT variable from the environment with a default value
const PORT = process.env.PORT || 4000
/////////////////////////////////////
// ALL YOUR MIDDLEWARE AND ROUTES GO HERE
app.use(morgan("tiny")) // middleware for logging
app.use(express.urlencoded({extended: true})) //middleware for parsing urlencoded data
app.use(express.json()) // middleware for parsing incoming json
app.use("/static", express.static("static")) // to set a folder for static file serving
/////////////////////////////////////
// Server Listener
app.listen(PORT, () => console.log(`Listening on port ${PORT}`))
Middleware
Middleware are just functions that receive three arguments:
req the request object, more on this later
res the response object, more on this later
next a function that passes the req/res objects to the next middleware or route.
Here is an example of the simplest middleware
const middlewareFunction = (req, res, next) => {
console.log("This is middleware")
}
The middleware functions can be registered using the .use method of the application object or
routers.
// using the middleware on all requests
app.use(middlewareFunction)
// using the middleware on certain urls
app.use("/endpoint", middlewareFunction)
Other popular middleware not in the previous code snippets include:
CORS For setting cors settings for API's
Method Override To override the request method on form submissions
express-session For setting up session cookies
And many others...
Routes
Routes determine what is the servers response to in an incoming request. A route is created by
using one of the following methods on the application object or a router:
.all for requests of any method
.get for GET requests
.post for POST requests
.put for PUT requests
.delete for DELETE requests
All of these functions take two arguments:
the endpoint
a "action", "Controller" or "Route Handler" function that takes req and res as arguments
Here is an example:
// writing pass an anonymous function
app.get("/endpoint", (req, res) => {
res.send("The Response")
})
// using a named function
function routeHandler(req, res){
res.send("the response")
}
app.get("/endpoint", routeHandler)
The Request Object (res)
The request object represents the data from the incoming request and is passed to all
middleware and route handlers.
dd e a e a d oute a d e s.
- req.headers object with the headers of the incoming request
- req.params object with any route params
- req.query object with any key/values from a url query string
- req.body object key/values of the request body (parsed by the express.urlencoded or
express.json middleware)
- req.method the method of the request as string
plus much more
The Response Object (res)
The response object is an object that is used to help author the response to the request.
Primarily made up of helper functions for different types of responses.
- res.send will send a text, html or json request depending on what is passed to it
- res.json send a javascript object or array as a json response
- res.render renders an html response from a template
Rendering Templates
Templates allow you to generate html responses dynamically, there are several templating
engines that can be used, here are few articles to see how to use them.
Intro to Express Templating
Express Templating Cheatsheet
To render a template we use the res.render function which takes two arguments:
the name of the the file to locate in the views folder
javascript object with data that can be used in the rendering of the template (each templating
language should have its own way of using the data from the object in the template)
Router Objects
You can group routes together using routers which can be used for organization and to apply
middleware to a specific group of routes.
Creating a Router
// create the router object
const router = express.Router()
// register it with the application for routes with a certain prefix
app.use("/prefex", router)
Just like the application object you can register middlewares routes with the router
// router specific middleware
router.use(middlewareFunction)
// registering routes
router.get("/endpoint", routerHandler) // url is /prefix/endpoint
Connecting to Databases
The following libraries can help you connect to different databases.
mongoose for connecting to a mongo database mongoose blog
sequalize ORM for SQL databases (postgres, mysql, etc.)
objection ORM for SQL databases (postgres, mysql, etc.)
waterline ORM for SQL databases (postgres, mysql, etc.)
Making API Calls
Keep in mind you can't use fetch natively in node, and jQuery is only a frontend library. But you
have some options.
node-fetch A library that replicates the browsers fetch function
Axios A library for making API Calls
GOT a library for making api calls
needle another http client library
Discussion (3)
Javier Telio • Apr 9
In the basic configuration of the server, there is an error in the following lines:
const express = require("express")
const express = require("morgan")
Alex Merced • Apr 15
fixed
NamKata • Apr 9
Great. Thank you your sharing