我的代码如下:
const myMiddleware = () => {
return (req, res, next) => {
...
console.log(res);// this outputs only the locals set in a previous middleware
res.send('not working');//send is not a function
}
}
及其用法:
router.post('/route', previousMiddleware(), myMiddleware(), (req, res) => {
doSomeStuff;
})
先前的中间件执行https请求,将结果设置在res.locals中,然后myMiddleware使用先前的中间件中的数据在其他位置进行另一个请求。如果中间件有错误,我需要退出整个路线。它可以在第一个(先前的)中间件功能中工作,但不能在第二个中。当我在以前的中间件中注销res
时,即使设置了本地语言,它也会通过.send
方法为我提供整个对象。如果我在res
函数的第一行(或任何位置)上登录myMiddleware()
,则res
是一个具有单个对象属性的对象,该对象属性与上一个.locals
中间件:
{ locals: { key: value } }
我进行了三重检查,没有混淆req, res, next
的顺序。
关于为什么以及如何解决的任何想法?
答案 0 :(得分:0)
您应该传递他们的名字,而不是直接在路由器中称呼他们。
router.post('/route', previousMiddleware, myMiddleware, (req, res) => {
doSomeStuff;
})
因为将在向服务器发送请求时(而不是在初始化服务器时)调用中间件。