繁体   English   中英

Put方法不使用后端的NodeJS更新Angular7中的MongoDB

[英]Put method not updating MongoDB in Angular7 with NodeJS on the backend

我在后端有这个带有NodeJS和MongoDB的Angular7应用程序。 我已经用Postman测试了我的put方法,并且效果很好。 错误出在我的Angular服务组件中,或者可能在使用该服务的组件模块中。 控制台中未显示任何错误消息。 我已经将其隔离了下来-所有数据都将其存储到服务中,因此故障发生在服务组件和Node api之间。 这是我的service.ts文件中的方法:

updateSavings(pin: string, data){
const url = `api/accounts/${pin}`;
console.log(data);
return this._http.put(url, data, httpOptions)
  .pipe(catchError(this.handleError)
  );
}

这是我的Api.JS方法,适用于Postman:

router.put('/accounts/:pin', function(req, res, next) {
  Accounts.findOneAndUpdate({pin: req.params.pin}, {savings: 
  req.body.savings}).then(function() {
  //console.log(req.body.savings);
  Accounts.findOne({pin:req.params.pin}).then(function(account){
  //console.log(res.send(account))
    }) 
  })
})

这是我使用services方法的组件方法:

depositSavings(data){
  let y = this.accountsService.updateSavings(this.appComponent.rightPin, 
  data);
  console.log(this.appComponent.rightPin);
  return y;
  }
} 

这是我的模板,向您展示正在发生的事情:

<input 
  type="text"
  id="input"
  [(ngModel)]="data"
  [ngModelOptions]="{standalone: true}">
  <br><br>
  <button (click)="depositSavings(data)">Submit</button> 

有什么主意我错了吗? 在此先感谢大家。

您必须传递当前的_id作为第一个参数,然后传递整个对象进行更新

router.put('/accounts/:pin', function(req, res, next) {
  Accounts.findOneAndUpdate(req.params._id, {pin: req.params.pin, savings: 
  req.body.savings}).then(function() {
  //console.log(req.body.savings);
  Accounts.findOne({pin:req.params.pin}).then(function(account){
  //console.log(res.send(account))
    }) 
  })
})

我解决了这个问题。 由于没有与此相关的错误消息,因此弄清楚这一点变得更具挑战性。 我所缺少的是我的服务方法内部的内容:

return this._http.put(url, {"savings": data}, httpOptions).subscribe(data => 
{console.log("PUT request successful ", data)})

仅仅是在原地的data ,您可以使用{"savings": data}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM