Node.js 猫鼬罐头';t将一个特定集合的文档保存到数据库
我有一个函数Node.js 猫鼬罐头';t将一个特定集合的文档保存到数据库,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我有一个函数 function generateInvoice(data) { const cdate = new moment.tz('GMT').toDate(); let invoiceData = { date: cdate, paidStatus: true, amount: data.amount, userId: data.userId } if (data.planName && data.planTypeName
function generateInvoice(data) {
const cdate = new moment.tz('GMT').toDate();
let invoiceData = {
date: cdate,
paidStatus: true,
amount: data.amount,
userId: data.userId
}
if (data.planName && data.planTypeName) {
invoiceData.item = `${data.planName} - ${data.planTypeName}`
invoiceData.quantity = data.seats || data.slots;
}
if (data.credits) {
invoiceData.item = 'Credits';
invoiceData.quantity = data.credits;
}
return Invoice.create(invoiceData).then((data)=>{
data.invoiceId = data._id.toString().slice(-5);
return data.save().then((data)=>{console.log(data); return data.invoiceId}).catch((err)=>{
throw new ErroWithStatusCode(500, 'Sorry, we seem to be facing some issue right now. Please, try again later.', err);
})
})
}
这就是我如何使用这个函数
return generateInvoice(invoiceData).then((data)=>{
newBooking.orderId = data;
id = data;
return newBooking.save().then((booking) => {
return booking;
}).catch((err) => {
throw new ErroWithStatusCode(500, 'Sorry, we are facing some issue right now. Please try again later.')
})
});
问题是我在我的发票
集合中找不到发票数据
。then
块的回调函数中的data
就是文档,但我在发票集合中找不到相同的文档
所有的承诺都得到了解决。它不在catch块中,我正在从Invoice.create(invoiceData)
接收有效数据
另外,newBooking.save()
函数正在按预期工作。所以,这是最让我困扰的,为什么它不适用于一个特定的收藏
背后的原因可能是什么
编辑:这是发票模式
const InvoiceSchema = new Schema({
item: String,
paidStatus: Boolean,
quantity: String,
amount: Number,
invoiceId: String,
userId: {type: mongoose.Schema.Types.ObjectId, ref: 'User'},
date: {type: Date, default: Date.now()},
__v: {type: Number, select: false}
}, {strict: true})
export default mongoose.model('Invoice', InvoiceSchema);
我没有收到任何错误,预订成功。我尝试将收到的数据记录在then块中,正如我前面提到的,它是一个有效的文档
编辑:以下是涉及使用生成文件
功能的完整代码:代替
return Invoice.create(invoiceData).then((data)=>{...
试一试
可能是模态的问题。您可以分享您的模式吗?您的
发票没有.catch()
子句。创建调用-可能尝试添加该调用,看看它是否显示任何有趣的内容。@BipinChandraTripathi我已经更新了我的question@d0gb3r7没有错误,这只是过程的一部分,在一系列承诺中,成功了。好吧,我试着在本地运行你的代码,generateInvoice
按预期创建了一个DB条目。但是,“我如何使用此函数”块不能按原样使用(大概newBooking
和id
是在程序的外部范围中定义的)。由于这个问题很难为其他人重现,我建议尝试在一个完整的、自包含的示例中重现这个问题(例如,在GitHub gist中)。你甚至可以自己找到解决办法。你能解释一下你的答案吗?一件事和另一件事有何不同?而且,我已经试过了,但没有成功。您的解决方案对您有效吗?如果仍然存在问题,请尝试记录错误,然后制作一个小示例,让我们测试一下,然后您还可以尝试删除旧文件并在其中创建新文件和代码
new Invoice(invoiceData).save((err,data)=>{
if(err) return console.log(err);
return data._id;
})