我正在使用快递。 在从Api发送响应之前,我在MongoDb中具有文件路径。 我在api Url前面加上文件路径 喜欢
song.path = url + song.path;
res.send(song);
但是这样做是因为它也更新了mongodb中的路径,即使我没有保存此文档,我也只是发送了响应
我尝试过
const newSong = song;
newSong.path = url + newSong.path;
res.send(newSong)
;
但这没有帮助,文档仍在更新。
这是我的控制人
const song = await Song.findOne({ 'lastPlayed': false }).sort("-totalRating");
song.lastPlayed = true;
song.save();
song.path = url + song.path;
res.send(song);
它应该仅更新属性以进行响应..不在Db中
更新
如果我注释掉song.save()
路径,则不会更新。
答案 0 :(得分:1)
发生的事情是doc.save()
是异步的,当您对对象进行突变并发送响应doc.save()
仅在主线程之后才执行,这就是为什么song.path = url + song.path;
被复制到mongoDB的原因您认为您以前保存过。
您可以仅为响应创建一个新对象
const song = await Song.findOne({ 'lastPlayed': false }).sort("-totalRating");
song.lastPlayed = true;
song.save();
res.send({ ...song, path: url + song.path });
或者您可以await
保存并然后为响应更改对象,如果希望在发送响应之前处理错误,这很好。
const song = await Song.findOne({ 'lastPlayed': false }).sort("-totalRating");
song.lastPlayed = true;
await song.save();
song.path = url + song.path;
res.send(song);