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');
})
当我运行上面的代码时,Node 编译器给我警告 TypeError: Cannot set property 'isLogged' of undefined
。我哪里出错了?
答案 0 :(得分:2)
你需要把当地人放在res
而不是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');
})
答案 1 :(得分:-1)
我不熟悉如何将数据从中间件传递到路由,但这看起来像是一个普通的 JavaScript 问题。看起来 req.locals
未定义。首先检查 req.locals
是否未定义。如果未定义,则通过 req.locals = {}
对其进行初始化。然后设置 req.locals.isLogged = true
。