Mam tę aplikację kątową z Nodejs i MongoDB na backend. Przetestowałem moją metodę put z listonoszem i działa doskonale. Błąd leży w moim komponencie serwisowym lub ewentualnie modułem komponentowym, który korzysta z usługi. W konsoli nie są wyświetlane żadne komunikaty o błędach. I odizolowałem go do tego - wszystkie dane składają się do usługi, więc podział jest między komponentem serwisowym a API węzła. Oto metoda w moim service.ts Plik:

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

Oto moja metoda api.js, która działa dobrze z listonoszem:

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))
    }) 
  })
})

Oto moja metoda komponentu, która korzysta z metody usług:

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

Oto mój szablon, aby ci pokazać, co się tam dzieje:

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

Jakieś pomysły, co mam złego? Dzięki z wyprzedzeniem.

2
BILL WAGNER 25 luty 2019, 07:44

2 odpowiedzi

Najlepsza odpowiedź

Obliczyłem problem. Ponieważ nie było żadnych komunikatów o błędach, sprawił, że trudniej jest to zrozumieć. To, czego brakowało, to w środku mojej metody serwisowej:

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

W miejsce tylko data, używasz {"savings": data}.

0
BILL WAGNER 25 luty 2019, 19:56

Musisz przekazać aktualną _id jako pierwszy parametr, a następnie cały obiekt aktualizacji

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))
    }) 
  })
})
0
Dhaval 25 luty 2019, 05:43