简体   繁体   English

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

[英]How to pass values from a middleware to a route in Express.js?

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 .当我运行上面的代码时,Node 编译器给了我一个TypeError: Cannot set property 'isLogged' of undefined Where do I go wrong?我在哪里 go 错了?

You need to put locals to res not req你需要把当地人放到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');
})

I am not familiar with how to pass data from a middleware to a route, but this looks like a plain javascript issue.我不熟悉如何将数据从中间件传递到路由,但这看起来像是一个普通的 javascript 问题。 It looks like req.locals is undefined.看起来req.locals是未定义的。 Start by checking if req.locals is undefined.首先检查req.locals是否未定义。 If it is undefined, intialize it through req.locals = {} .如果未定义,则通过req.locals = {}对其进行初始化。 Then set req.locals.isLogged = true .然后设置req.locals.isLogged = true

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM