12

所以像往常一样,我试图在 SO 上找到这个问题,但仍然没有运气。

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

例如下面的代码会抛出一个错误:

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

错误:

ReferenceError: Invalid left-hand side in assignment


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

在某些情况下,这可能会派上用场。

  1. 一种将快速链接转换为完整请求并将其代理的服务。
  2. 只需在将参数发送到您不想修改的另一个函数之前修改参数。

关于问题,有没有办法修改 req 对象参数?

4

3 回答 3

25

而不是:

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

您需要使用:

req.params.q = "something";

第一个是尝试在 param 函数的返回值上设置一个值,而不是参数本身。

值得注意的是req.param()方法从 , 中检索值req.bodyreq.params并且req.query按顺序一次,但是要设置一个值,您需要指定它进入这三个中的哪一个:

req.body.q = "something";
// now: req.param('q') === "something"
req.query.r = "something else";
// now: req.param('r') === "something else"

也就是说,除非您永久修改从客户端提交的内容,否则最好将其放在其他地方,以免您正在使用的任何第三方模块将其误认为来自客户端的输入。

于 2013-09-14T13:23:54.690 回答
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');
于 2015-10-28T09:27:22.280 回答
1

还可以想象,左边不是变量或属性,因此尝试为其赋值是没有意义的。如果要更改查询参数,则必须修改对象中的属性req.query

req.query.q = 'something';

req.body和也是如此req.params

于 2013-09-14T13:23:31.717 回答