在下面,您可以找到使用我的带有位置和票证数组的Place模式创建的位置示例。在票证阵列中有一个嵌套的笔记阵列。我正在尝试使用router.post函数,并使用unshift将笔记上传到数据库,但没有成功。您能告诉我我在做什么错吗?谢谢!
这是我得到的错误:
(节点:36073)UnhandledPromiseRejectionWarning:TypeError:无法读取null的属性“票证” 在Place.findOne.then.place(/Users/fifi/Desktop/FAM./routes/tickets.js:111:13) 在processTicksAndRejections(内部/进程/next_tick.js:81:5) (节点:36073)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。引发此错误的原因可能是抛出了一个没有catch块的异步函数,或者是拒绝了一个.catch()无法处理的承诺。 (拒绝ID:1) (节点:36073)[DEP0018] DeprecationWarning:已弃用未处理的承诺拒绝。将来,未处理的承诺拒绝将以非零退出代码终止Node.js进程。
"_id" : ObjectId("5c716edf8f0d6f7b5b4b310f"),
"location" : [
{
"phoneNumber" : "+1 212-226-3126",
"website" : "https://www.apple.com",
"contactEmail" : "apple1004SoHo@apple.com",
"_id" : ObjectId("5c716edf8f0d6f7b5b4b3110"),
"street" : "Prince St",
"buildingNumber" : 103,
"buildingAddition" : "",
"postcode" : "10012",
"city" : "New York",
"country" : "United States",
"latitude" : 40.725056,
"longitude" : -73.999027
}
],
"tickets" : [
{
"status" : "Unassigned",
"_id" : ObjectId("5c729175bdfe628cb5a205c3"),
"ticketUser" : ObjectId("5c6d2e81e6117a2ddb07b070"),
"description" : "Test",
"priority" : "Medium",
"notes" : [
],
"createdAt" : ISODate("2019-02-24T12:43:33.342+0000"),
"updatedAt" : ISODate("2019-02-24T12:43:33.342+0000")
}
],
"customerID" : "Apple",
"placeID" : "1004",
"name" : "SoHo",
"__v" : 2
router.post('/notes/:id', (req, res) => {
Place.findOne({
_id: req.params.id
})
.then(place => {
const newNote = {
noteBody: req.body.noteBody,
noteUser: req.user.id,
}
place.tickets.notes.unshift(newNote);
place.save()
.then(place => {
res.redirect('back')
});
});
});
答案 0 :(得分:0)
category_id
返回findOne
或null
。undefined
为place
,则调用null
会引发错误在应用其余逻辑之前,添加一条place.tickets
语句以检查您的if
项目是否为place
null
Place.findOne({
_id: req.params.id
})
.then(place => {
// Add the IF here
if (!place) {
return res.status(404).send('Place not found');
}
const newNote = {
noteBody: req.body.noteBody,
noteUser: req.user.id,
}
place.tickets.notes.unshift(newNote);
place.save()
.then(place => {
res.redirect('back')
}).catch(err => res.send(err));
}).catch(err => res.send(err));
等同于.findOne({_id: req.params.id})
.findById(req.params.id)
时请不要忘记 catch
。否则,如果服务器遇到错误,您的请求可能会超时并且永远不会返回响应