javascript - 在 NodeJS 中使用 Mongoose 保存具有新创建的引用 ID 的新对象
问题描述
我有一个名为order的模型,它有一个属性orderItem。orderItem 的类型为 id orderItem 这里是模式的摘录。
const mongoose = require('mongoose');
const orderSchema = mongoose.Schema({
orderItems: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'OrderItem',
required: true
}],
shippingAddress1: {
type: String,
required: true,
},
我首先创建订单项目,然后将订单项目集合保存为我要保存的新订单的一部分。这样做:
const orderItemsIds = Promise.all(req.body.orderItems.map(async orderItem => {
let newOrderItem = new OrderItem({
quantity: orderItem.quantity,
product: orderItem.product
})
newOrderItem = await newOrderItem.save();
return newOrderItem._id;
}))
try {
const resolvedOrderItemsIds = await orderItemsIds;
console.log(resolvedOrderItemsIds);
let order = new Order({
orderItems: resolvedOrderItemsIds,
...
})
// order = await order.save();
order.save(function (err) {
if(!order) {
return res.status(400).send('The order cannot be created!');
}
return res.status(201).send({'message': 'Order Created', order});
})
} catch (error) {
}
})
OrderItems 和Order已创建,我在 PostMan 中收到所有内容均已创建的响应。我看到这样的结果:
{
"message": "Order Created",
"order": {
"orderItems": [
"615562ab6c7cd7021c7e37f7",
"615562ab6c7cd7021c7e37f8"
],
"shippingAddress1": "21 sample street",
"shippingAddress2": "Sample Bus Stop",
"city": "Sample",
"zip": "100001",
"country": "Sample",
"status": "Pending",
"user": "6151a6d7f6d3b96060f0aec5",
"_id": "615562ab6c7cd7021c7e37fb",
"dateOrdered": "2021-09-30T07:09:31.493Z",
"id": "615562ab6c7cd7021c7e37fb"
}
}
有趣的是,订单没有保存在 MongoDB 中。我能知道我做错了什么吗?
解决方案
原来我在构建请求正文时缺少一个必填字段,并且在以我的方式发布请求后没有任何形式的信息。当我像这样保存项目时,我发现了我缺少的字段:
await order.save().then(item => {
return res.status(201).send({'message': 'Order Created', item});
}).catch(err => {
res.status(400).send({"message": 'The order cannot be created!', "error": err});
})
推荐阅读
- webpack - 在 Next.js 中编译 npm 模块
- reactjs - 如何解决 Linux 中的“npm ERR!code ELIFECYCLE”错误?
- node.js - axios拦截器总是解析promise
- python - 如何通过 Chrome 设备工具栏使用 Selenium 和 Python 向上滚动 Instagram 直接消息
- ios - 常规委托和 ProxyDelegate RxSwift
- python - 查找特定字符串并输出整行 Python
- excel - Excel 隐藏日期从 DDD MMM DD HH:MM:ss YYYY 到 YYYY-MM-DD HH:MM:ss
- javascript - javascript和html,css的错误魔术缩放
- javascript - 将js对象数组转换为关联数组
- c# - C# - 如何使用 C# 在整个 Excel 文件中取消选择换行