Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么不使用参数调用此Express中间件?_Javascript_Node.js_Express_Middleware - Fatal编程技术网

Javascript 为什么不使用参数调用此Express中间件?

Javascript 为什么不使用参数调用此Express中间件?,javascript,node.js,express,middleware,Javascript,Node.js,Express,Middleware,我正在开发一个需要运行bodyParser的中间件,但我不想让应用程序将其作为依赖项引入。相反,我想制作一个需要它的包,并导出如下中间件: //routes.js app.use('/', middlewareWrapper(thing)); //middlware.js export function middlewareWrapper(thing) { return function addBody(req, res, next) { function otherm

我正在开发一个需要运行
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仍然以相同的方式工作):

为什么调用
othermiddleware
时没有参数?

因为您这样做了

next();
不传递参数。我通常是这样做的:

bodyParser.json()(
  req,
  res,
  () => {
    othermiddleware(req,res,next);
  }
);
或者使用一些绑定魔法:

bodyParser.json()(req, res, othermiddleware.bind(this,req,res,next));
因为你知道

next();
不传递参数。我通常是这样做的:

bodyParser.json()(
  req,
  res,
  () => {
    othermiddleware(req,res,next);
  }
);
或者使用一些绑定魔法:

bodyParser.json()(req, res, othermiddleware.bind(this,req,res,next));

问题是,
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);
    };

问题是,
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);
    };

我相信
bodyParser.json()
返回的中间件只需像这样调用
next()
(即不带参数)。这里,您将
othermiddleware
作为
next
传递给
bodyParser.json()
返回的中间件。所以它不包含任何参数。你完全正确。我的同事也指出了这一点。如果你这样回答,我会接受。为什么要投反对票?我相信
bodyParser.json()
返回的中间件只需像这样调用
next()
(即没有参数)。这里,您将
othermiddleware
作为
next
传递给
bodyParser.json()
返回的中间件。所以它不包含任何参数。你完全正确。我的同事也指出了这一点。如果你这样回答,我会接受。为什么投反对票?IIRC bodyparser会在req对象中添加一个body对象。@dlow它会在req对象中添加一个
body
属性。它不会更改
req
对象的引用。这就是我写的。IIRC bodyparser将一个body对象添加到req对象。@dLow它将一个
body
属性添加到
req
对象。它不会更改
req
对象的引用。这就是我写的。