我正在使用mongoDB来存储文档。在我的http get请求中,我拉出特定的文档记录并将其保存在请求对象上以进行处理(使用中间件)。稍后当有任何补丁/放置请求时,我使用相同的请求对象并修改参数。但问题在于我想在put / patch请求中修改之后使用先前的请求存储值。即使我试图在请求参数下存储不同的变量,但是当我在req值上更改任何内容时,所有请求值都会被修改。下面是代码。
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)
如果有什么不能理解的话,请给我回电话
答案 0 :(得分:0)
使用Object.assign()
,就像那样:
req.PreviousStoreData = {};
Object.assign(req.PreviousStoreData, _.head(data));
req.currentData = _.head(data);
req.currentData.status = req.body.status;
通过键入“=”,您可以设置对象的引用,该对象与currentData使用的对象相同。更改此对象将导致两个值都发生更改。
Object.assign()
将源对象(最后一个参数)中的所有参数复制到目标对象(不是最后一个参数),因此您实际上是在复制对象而不是引用它。
答案 1 :(得分:0)
Object.assign()似乎确实如此。但是第一个参数需要是一个空对象,作为源对象,这样就不会影响引用。
req.PreviousStoreData = Object.assign({}, _.head(data));
req.currentData = Object.assign({}, _.head(data));
req.currentData.status = req.body.status;
在这里,您要复制Object,而不是为其指定引用。