【问题标题】:Modify Node.js req object parameters修改 Node.js req 对象参数
【发布时间】:2013-09-19 01:07:59
【问题描述】:

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

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

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

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

错误:

ReferenceError: Invalid left-hand side in assignment


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

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

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

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

【问题讨论】:

    标签: node.js express javascript


    【解决方案1】:

    也可以想象,左边不是变量或属性,所以试图给它赋值是没有意义的。如果要更改查询参数,则必须修改 req.query 对象中的属性。

    req.query.q = 'something';
    

    req.bodyreq.params 也是如此。

    【讨论】:

      【解决方案2】:

      而不是:

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

      你需要使用:

      req.params.q = "something";
      

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

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

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

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

      【讨论】:

      • 哦,我真傻!我可以发誓我按照你的方式尝试过,得到了同样的结果,但我用了你的例子,它让我成为了骗子。谢谢!编辑:在一种情况下,欺骗第三方模块正是我的目标。
      • 我认为如果params 中的某些参数已经有值(例如:foo: 'some value'),则无法通过调用req.params.foo = 'bar' 来更改它的值,但正如@roy-reiss 所说可以调用req.body.foo = 'bar'。在您通过调用req.params 更改它之前,它好像没有任何价值一样令人困惑。不知道是bug还是什么。
      【解决方案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');
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多