修改res而不改变参数

时间:2016-04-20 23:23:14

标签: javascript node.js express eslint

我正在编写一个Express应用程序,我正在使用AirBnB eslint configuration。该lint配置提供no-params-reassign检查,该检查将参数和这些参数的成员的重新分配标记为错误。我个人喜欢这样,但我不确定是否有办法在Express中修改reqres而不改变函数参数。

例如,我想在中间件中重写部分请求:

app.use((req, res, next) => {
  req.url = req.url.replace("regex", "replacement");
});

这会引发一个lint错误。我知道我可以通过这样做来消除错误:

app.use((_req, res, next) => {
  req = _req;
  req.url = req.url.replace("regex", "replacement");
});

......但这似乎是一种有点愚蠢的解决方案。是否有一种方法可以替换Express中未来的中间件调用的reqres变量,或者是持续更改以实际改变它们的唯一方法?

我知道我可以覆盖no-params-reassign规则,但我想看看我是否可以在不这样做的情况下实现这一目标。谢谢!

1 个答案:

答案 0 :(得分:0)

  

是否有一种方法可以替换Express中的req和res变量以用于将来的中间件调用:

在第一次调用时将app对象用作持久存储,然后在后续调用中进行检查

app.use( (req, res, next) => { 
  app.req = app.req || req;
  app.req.url = app.req.url.replace("regex", "replacement");
});

JSON.stringifyJSON.parse可用于避免变异:

app.use( (req, res, next) => { 
  app.req = app.req || JSON.parse(JSON.stringify(req));
  app.req.url = app.req.url.replace("regex", "replacement");
});

<强>参考