我正在编写一个Express应用程序,我正在使用AirBnB eslint configuration。该lint配置提供no-params-reassign
检查,该检查将参数和这些参数的成员的重新分配标记为错误。我个人喜欢这样,但我不确定是否有办法在Express中修改req
和res
而不改变函数参数。
例如,我想在中间件中重写部分请求:
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中未来的中间件调用的req
和res
变量,或者是持续更改以实际改变它们的唯一方法?
我知道我可以覆盖no-params-reassign
规则,但我想看看我是否可以在不这样做的情况下实现这一目标。谢谢!
答案 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.stringify
和JSON.parse
可用于避免变异:
app.use( (req, res, next) => {
app.req = app.req || JSON.parse(JSON.stringify(req));
app.req.url = app.req.url.replace("regex", "replacement");
});
<强>参考强>