修改 Node.js 的 req 对象参数

14

通常情况下,我尝试在SO上找到这个问题,但还是没有找到。

我知道答案是“Yes,你可以修改req对象”,但是没有提到req对象的参数。

例如,以下代码会抛出一个错误:

app.get('/search', function(req, res) {
   req.param('q') = "something";
});

错误:

ReferenceError: Invalid left-hand side in assignment


我想这可能与该属性没有“SET”方法或类似的东西有关。

有一些情况下这会很有用:

  1. 将快速链接转换为完整请求并代理它们的服务。
  2. 在将参数发送到另一个您不想修改的函数之前,简单地修改参数。

进入问题,是否有一种方法可以修改req对象的参数?

3个回答

28

与其:

req.param('q') = "something";

您需要使用:

req.params.q = "something";

第一个问题是试图在param函数的返回值上设置一个值,而不是参数本身。
值得注意的是req.param()方法同时按照req.body、req.params和req.query的顺序检索值,但要设置一个值,你需要指定它属于这三个中的哪一个:
req.body.q = "something";
// now: req.param('q') === "something"
req.query.r = "something else";
// now: req.param('r') === "something else"

如果你不会永久修改来自客户端的某些内容,最好将其放在其他地方,以便任何第三方模块都不会将其误认为是来自客户端的输入。


噢,我真是个傻瓜!我发誓我试过你的方法并得到了相同的结果,但是我使用了你的示例,它让我变成了一个说谎者。谢谢!编辑:在某些情况下,欺骗第三方模块正是我的目标。 - Levi Roberts
1
我认为如果params中的某个参数已经有一个值(例如:foo: 'some value'),则无法通过调用req.params.foo = 'bar'来更改其值,但正如@roy-reiss所说,可以通过调用req.body.foo ='bar'来更改它的值。这很令人困惑,因为如果在之前没有值,您可以通过调用req.params来更改它。不知道这是一个错误还是什么。 - Pouria Moosavi

3

在请求中设置参数的替代方法(使用任何一种):

                    req.params.model = 'Model';
Or
                    req.params['model'] = 'Model';
Or
                    req.body.name = 'Name';
Or
                    req.body['name'] = 'Name';
Or
                    req.query.ids = ['id'];
Or
                    req.query['ids'] = ['id'];

现在获取参数如下所示:
        var model = req.param('model');
        var name = req.param('name');
        var ids = req.param('ids');

1

我们可以想象左侧不是变量或属性,因此尝试给它赋值是没有意义的。如果您想更改查询参数,必须修改req.query对象中的属性。

req.query.q = 'something';

同样适用于 req.bodyreq.params


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接