Using Express Middlewares with Zero
Express.js has lots of great middleware plugins. There are multiple ways to use them with Zero.
Exporting an Express App
One way to solve this is to just export your express app. Here is one API with two logging middlewares.
// ./user.jsconst app = require('express')()var logOriginalUrl = function (req, res, next) {console.log('url', req.originalUrl)next()}var logMethod = function (req, res, next) {console.log('method', req.method)next()}app.use([logOriginalUrl, logMethod])app.use((req, res)=>{res.send("User Info")})module.exports = app
This method is great if you only want to use a middleware in a few handlers. But it's not much feasible when you want to add a middleware for all endpoints.
Wrapping Method
Another workaround is to wrap your API handler with the middleware, below are two middlewares, one is to log the HTTP method of each request and another to enable CORS (cross-origin resource sharing). We keep them in a separate file so we can import them to each handler:
// ./common/middlewares.js// MIDDLEWARESvar enableCORS = (req, res, next) => {res.header("Access-Control-Allow-Origin", "*");res.header("Access-Control-Allow-Headers","Origin, X-Requested-With, Content-Type, Accept");next();};var logMethod = function(req, res, next) {console.log("method", req.method);next();};// Call each middleware and then our handlermodule.exports = (req, res, handler) => {logMethod(req, res, () => {enableCORS(req, res, () => {handler(req, res);});});};
We then use these middlewares in our handler:
// ./user.jsconst middlewares = require("./common/middlewares");module.exports = (rq, rs) =>middlewares(rq, rs, (req, res) => {res.send("Some User Info");});