代码之家  ›  专栏  ›  技术社区  ›  Jazzy

为什么不使用参数调用这个Express中间件?

  •  0
  • Jazzy  · 技术社区  · 9 年前

    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 被调用,但没有参数。

    https://stackoverflow.com/a/17997640/444871

    为什么是 其他中间件

    2 回复  |  直到 9 年前
        1
  •  1
  •   Prakash Sharma    9 年前

    问题是中间件返回了 bodyParser.json() 只需呼叫 next() othermiddleware 在返回的中间件旁边 bodyParser。json() . 因此,它不包含任何参数。

    此外,bodyParser不会更改的原始引用 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);
        };
    
        2
  •  1
  •   Jonas Wilms    9 年前

    next();
    

    不传递参数。通常express会这样做:

    bodyParser.json()(
      req,
      res,
      () => {
        othermiddleware(req,res,next);
      }
    );
    

    或者你使用一些绑定魔法:

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