Reputation: 426
const router = require('express').Router()
const loggerMiddleware = (req, res, next) => {
console.log(`${req.method} ${req.path}`)
req.locals.isLogged = true
next()
}
router.get('/color', loggerMiddleware, (req, res) => {
console.log(req.locals.isLogged)
res.send('#ff0000');
})
When I run the code above, Node compiler gives me a warning of TypeError: Cannot set property 'isLogged' of undefined
. Where do I go wrong?
Upvotes: 2
Views: 743
Reputation: 419
I am not familiar with how to pass data from a middleware to a route, but this looks like a plain javascript issue. It looks like req.locals
is undefined. Start by checking if req.locals
is undefined. If it is undefined, intialize it through req.locals = {}
. Then set req.locals.isLogged = true
.
Upvotes: -1
Reputation: 4710
You need to put locals to res
not req
const router = require('express').Router()
const loggerMiddleware = (req, res, next) => {
console.log(`${req.method} ${req.path}`)
res.locals.isLogged = true
next()
}
router.get('/color', loggerMiddleware, (req, res) => {
console.log(res.locals.isLogged)
res.send('#ff0000');
})
Upvotes: 3