zero
zero copied to clipboard
Middleware support
Assume that I have these middlewares like this
var logStuff = [logOriginalUrl, logMethod]
app.get('/user/:id', logStuff, function (req, res, next) {
res.send('User Info')
})
How do I write it the same way in zero?
Thank you
One way to solve this is to just export your express app:
// ./user.js
const 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
@asadm do i need to create express app each files?
@rosancoderian Another way I personally prefer is calling the middleware directly:
Keeping all middlewares in a separate file:
// ./common/middlewares.js
// MIDDLEWARES
var logOriginalUrl = function (req, res, next) {
console.log('url', req.originalUrl)
next()
}
var logMethod = function (req, res, next) {
console.log('method', req.method)
next()
}
// Call each middleware and then our handler
module.exports = (req, res, handler)=>{
logMethod(req, res, ()=>{
logOriginalUrl(req, res, ()=>{
handler(req, res)
})
})
}
and then use these middlewares in our API:
// ./user.js
const middlewares = require("./common/middlewares")
module.exports = (rq, rs) => middlewares(rq, rs, (req, res)=>{
res.send("User Info")
})
I wonder if this can be simplified further.
You can also create a high order function, like this:
// ./middlewares/logMethod.js
export default function(callback) {
return (req, res) => {
console.log('Request method:', req.method)
callback(req, res);
}
}
// ./user.js
function handler(req, res) {
}
export default logMethod(handler)