如何将值从中间件传递到 Express.js 中的路由?

时间:2020-12-21 17:09:44

标签: javascript node.js express

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。我哪里出错了?

2 个答案:

答案 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