node.js - 在发送到 api 响应之前修改 mongodb 记录
问题描述
我使用 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.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);
});
使用集合中的findOneAndUpdate
方法来更新该集合中的文档mongodb
。Products
findOneAndUpdate
将三个对象作为参数:
- 第一个指定查询条件
- second 指定更新的文档
- 在这里,我们使用运算符向现有文档
$set
添加属性。image
- 在这里,我们使用运算符向现有文档
- 第三个是
options
对象- 设置
new
为 true 告诉 mongo 返回更新后的文档而不是原始文档,这是默认的
- 设置
这是对文档的参考,以获取更多信息:https ://docs.mongodb.com/manual/reference/method/db.collection.findOneAndUpdate/
编辑:要仅修改响应,您可以在.then
:
.then(products => {
const modifiedProducts = products.map(product => ({
...product,
image: '/assets/images/' + product._id + '.jpg'
}));
return res.status(200).json(modifiedProducts);
})
在这里,我们为返回的每个产品创建一个新对象,方法是复制其原始内容和新的图像属性,然后将该modifiedProducts
数组返回给客户端
推荐阅读
- c# - 我应该为 Xbox One 选择哪个 UWP 版本?
- java - 从 SQL 查询休眠 Java 中获取对象
- qt - QMenuBar 将 QAction 对齐到中心
- python - 具有两个 def() 函数的局部变量上的 UnboundLocalError
- python-3.x - 带有tableau tabcmd错误的python子进程
- c++ - int(c) 和 c-'0' 之间的区别。C++
- ios - 将objective-c完成处理程序传递给swift
- python - Python程序读取excel表格不起作用?
- excel - 自动计算从开始日期起 90 天
- typescript - Typescript如何在不修改函数的情况下更改函数结果