如何解决Heroku MEAN Stack CRUD App教程中的放置请求

时间:2019-02-02 01:25:38

标签: angular angular-cli put

我遵循此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错误。

2 个答案:

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