在NodeJS中使用Mongoose保存新创建的引用id的新对象



我有一个模型叫做order具有属性orderItem. orderItem的类型是id,下面是模式的摘录。

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});
})

最新更新