我遵循此tutorial from Heroku进行了MEAN堆栈CRUD应用程序部署。创建,删除和获取所有工作。我现在收到的唯一错误是来自Put。尝试更新的对象,不知道为什么,当我得到一个500错误。我的代码在下面。
//HTML
<div *ngIf="contact" class="row">
...
<button class="btn btn-info" *ngIf="contact._id" (click)="updateContact(contact)">Update</button>
//.ts file
updateContact = (contact: Contact) => {
var idx = this.getIndexOfContact(contact._id);
if (idx !== -1) {
this.contacts[idx] = contact;
this.selectContact(contact);
}
return this.contacts;
}
private getIndexOfContact = (contactId: String) => {
return this.contacts.findIndex((contact) => {
return contact._id === contactId;
});
}
//server.js file
app.put("/api/contacts/:id", function(req, res) {
var updateDoc = req.body;
delete updateDoc._id;
db.collection(CONTACTS_COLLECTION).updateOne({_id: new ObjectID(req.params.id)}, updateDoc, function(err, doc) {
if (err) {
handleError(res, err.message, "Failed to update contact");
} else {
updateDoc._id = req.params.id;
res.status(200).json(updateDoc);
}
});
});
我的控制台告诉我,在updateContact处,contact =未定义。但这绝对是因为我可以在“删除”和“获取”请求中进行控制台记录。之后,我也收到500错误。他们的example site也不允许更新。看起来他们也会遇到500错误。
答案 0 :(得分:0)
哪个updateContact
未定义?您是否尝试过在每种方法的开头都记录它?我们可以看到您的ContactDetailComponent
吗?找到解决方案后,请发布答案,以便将来的查询者得到帮助。
编辑: 意思是评论,错误的按钮。请无视。
答案 1 :(得分:0)
在此修复了放置请求。需要正确PARAMS发送到updateOne()方法和使用$组
app.put("/api/contacts/:id", function(req, res) {
var updateDoc = req.body;
delete updateDoc._id;
var newValues = { $set: updateDoc};
db.collection(CONTACTS_COLLECTION).updateOne({_id: new
ObjectID(req.params.id)}, newValues, function(err, doc) {
if (err) {
handleError(res, err.message, "Failed to update contact");
} else {
updateDoc._id = req.params.id;
res.status(200).json(updateDoc);
}
});
});