【问题标题】:Values pass through request to other classes in node js值通过请求传递给节点js中的其他类
【发布时间】:2018-07-30 02:01:41
【问题描述】:

我正在使用 mongoDB 来存储文档。在我的 http get 请求中,我提取特定的文档记录并将其保存请求对象以对其进行处理(使用中间件)。稍后当有任何补丁/放置请求时,我使用相同的请求对象并修改参数。但是问题在于,当我想在 put/patch 请求中修改后使用先前的请求存储值时。即使我尝试在请求参数下存储不同的变量,但是当我更改请求值的任何内容时,所有请求值都会被修改。下面是一段代码。

req.PreviousStoreData = _.head(data);  //data object
req.currentData = _.head(data);   // copy data object
req.currentData.status = req.body.status;
// now if try to see the PreviousStoreData then it also got modified with latest status (modified only in currentData param)

如果有什么不明白的,请回复我

【问题讨论】:

    标签: node.js express request httprequest node-modules


    【解决方案1】:

    使用Object.assign(),像这样:

    req.PreviousStoreData = {};
    Object.assign(req.PreviousStoreData, _.head(data));
    req.currentData = _.head(data);
    req.currentData.status = req.body.status;
    

    通过键入“=”,您可以设置对对象的引用,该对象与 currentData 使用的对象相同。更改此对象将导致两个值都更改。

    Object.assign() 将源对象(最后一个参数)中的所有参数复制到目标对象(非最后一个参数),因此您实际上是在复制一个对象而不是引用它。

    【讨论】:

    • Dint 锻炼。仍然用最新的变化来消除过去的价值。我什至尝试了一个新变量const storeData = Object.assign({}, req.mission ); req.mission[stage] = req.body[stage];
    【解决方案2】:

    Object.assign() 似乎是要走的路。但是第一个参数需要是一个空对象,作为源对象,这样才不会影响引用。

    req.PreviousStoreData = Object.assign({}, _.head(data));  
    req.currentData = Object.assign({}, _.head(data));   
    req.currentData.status = req.body.status;
    

    在这里您是复制对象,而不是为其分配引用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-31
      • 2020-06-24
      相关资源
      最近更新 更多