Node.js 在发送到api响应之前修改mongodb记录
我使用MongoDB作为数据库,使用express.js构建API。 我想在将响应发送到客户端之前修改它。 这是我的express.js代码Node.js 在发送到api响应之前修改mongodb记录,node.js,mongodb,api,express,Node.js,Mongodb,Api,Express,我使用MongoDB作为数据库,使用express.js构建API。 我想在将响应发送到客户端之前修改它。 这是我的express.js代码 products.route("/:id") .get((req, res) => { mdb.get().collection('products').find({_id:parseInt(req.params.id), status:1}).toArray() .then(response => res.
products.route("/:id")
.get((req, res) => {
mdb.get().collection('products').find({_id:parseInt(req.params.id), status:1}).toArray()
.then(response => res.status(200).json(response))
.catch(error => console.error(error));
})
比如,我想在响应中添加一些计算字段。假设数据库中的响应对象是
response = {
id: 1001,
name: 'Apple',
price: 120
}
现在,我想添加图像字段。因此,我的最终响应对象将是
response = {
id: 1001,
name: 'Apple',
price: 120,
image: '/assets/images/'+id+'.jpg'
}
请帮我解决这个问题。我是express.js中的新手。在您的路由器处理程序中,您可以执行以下操作:
Products
.findOneAndUpdate({ _id: req.params._id, status: 1 }, {
$set: {
images: '/assets/images/' + req.params._id + '.jpg'
}
},{
new: true
})
.then(product => {
if(!product) return res.status(404).json("Product not found");
else return res.status(200).json(products);
})
.catch(err => {
console.error(err);
return res.status(500).json(err);
});
使用mongodb
中Products
集合中的findOneAndUpdate
方法更新该集合中的文档
findOneAndUpdate
将三个对象作为参数:
- 第一个指定查询条件
- 第二个指定更新的文档
- 这里我们使用
操作符将$set
属性添加到现有文档中图像
- 这里我们使用
- 第三个是
对象options
- 将
设置为true,告诉mongo返回更新的文档而不是原始文档,这是默认值new
- 将
内执行。然后:
.then(products => {
const modifiedProducts = products.map(product => ({
...product,
image: '/assets/images/' + product._id + '.jpg'
}));
return res.status(200).json(modifiedProducts);
})
在这里,我们为要返回的每个产品创建一个新对象,方法是复制其原始内容和新的image属性,然后将modifiedProducts
数组返回到客户端一次返回一条记录的好解决方案,但返回多行时会发生什么情况?@SurajBharti您可以使用.updateMany()
要更新多个记录,然后在中使用相同的查询条件。find()
之后立即将相同的记录返回给客户端,我不想更新数据库,我只想通过API提供修改后的数据