NodeJS 相同的路由、不同的查询但不同的中间件

pxiryf3j  于 2023-01-04  发布在  Node.js
关注(0)|答案(1)|浏览(168)

我正在开发一个API,它有这样的路由(所有POST请求)
一个一个一个一个一个一个一个一个...
这就是它的处理方式
server.js

app.post("/friends", (req, res, next) => {
  let d = req.query.d
  let path "./funcs/" + d + ".js"
  return require(path)(req, res, next)
})

./funcs/onlineFriends.js

module.exports = (req, res, next) => {
  return res.sendStatus(200)
}

But the thing is, I want to use different middlewares per func, with the code above if I wanted to use a middleware it would apply to all funcs because you'd have to put it in app.post part.
我试过了:

module.exports = (req, res, next) => {
  middleware(req, res, next)
  return res.sendStatus(200)
}

但是当然它导致Cannot set headers after they are sent to the client
我知道你可能会问"为什么不使用像/friends/online这样的路由器",我真的不能改变客户端,这是我必须做的。

o7jaxewo

o7jaxewo1#

如果您有中间件abc,您可以动态选择它们的组合并使用它们来处理请求:

app.post("/friends", function(req, res, next) {
  var middleware;
  switch (req.query.d) {
    case "a": middleware = [a, c]; break;
    case "b": middleware = [b]; break;
    default: return next();
  }
  express.Router().use(middleware)(req, res, next);
});

相关问题