在中间件中使用Node Express时,“ res.send不是函数”

时间:2019-05-09 23:15:14

标签: node.js express https middleware

我的代码如下:

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的顺序。

关于为什么以及如何解决的任何想法?

1 个答案:

答案 0 :(得分:0)

您应该传递他们的名字,而不是直接在路由器中称呼他们。

router.post('/route', previousMiddleware, myMiddleware, (req, res) => {
    doSomeStuff;
})

因为将在向服务器发送请求时(而不是在初始化服务器时)调用中间件。