gpt4 book ai didi

javascript - 为什么这个 Express 中间件不带参数调用?

转载 作者:行者123 更新时间:2023-12-01 03:05:14 25 4
gpt4 key购买 nike

我正在开发一个需要 bodyParser 才能运行的中间件,但我不想让应用程序将其作为依赖项引入。相反,我想制作一个需要该功能的包并导出这样的中间件:

//routes.js
app.use('/', middlewareWrapper(thing));

//middlware.js
export function middlewareWrapper(thing) {
return function addBody(req, res, next) {
function othermiddleware(_req, _res) {
// do something with thing and _req
return next();
}
return bodyParser.json()(req, res, othermiddleware);
};
}

这看起来可行,并且调用了othermiddleware,但没有参数。

我找到了另一个答案,它以基本相同的方式解决了这个问题(它很旧,但 JS 仍然以相同的方式工作):https://stackoverflow.com/a/17997640/444871

为什么在没有参数的情况下调用其他中间件

最佳答案

问题是 bodyParser.json() 返回的中间件只是像这样调用 next() (即不带参数)。在这里,您将 othermiddleware 作为 bodyParser.json() 返回的中间件传递。因此它不包含任何参数。

此外,bodyParser 不会更改 req/res 对象的原始引用。因此主 req/res 对象仍然引用同一个对象。所以你不需要传递参数。您也可以在 othermiddleware 函数中使用相同的 req/res 对象。

return function addBody(req, res, next) {
function othermiddleware() {
// You should be able to use req and res modified by bodyParser.
// You dont need arguments to be passed.
return next();
}
return bodyParser.json()(req, res, othermiddleware);
};

关于javascript - 为什么这个 Express 中间件不带参数调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46246145/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com