Служба Angular не передает значения в бэкэнд - ошибка заголовка - PullRequest
0 голосов
/ 09 ноября 2019

Я не могу понять, почему мои значения не передаются от угловой службы к вызову express / mongoose PATCH. Он попадает в документ в таблице, но обновляет currentBid до null, а lastBidTimeStamp и bidderId не обновляются.

Если я использую почтальон, как это:

https://postimg.cc/1nQnX3zK

Эти два значения тоже не обновляются. Только актуальные ставки в почтальоне.

Я сделал console.log (lastBidTimeStamp) в сервисе, и он правильно вывел дату, поэтому он получает значение в сервисе.

Не уверен, что я делаю неправильно. Все еще учусь. Любая помощь приветствуется.

bidding.service.ts

import { Injectable } from '@angular/core';
import { HttpClient, HttpParams } from '@angular/common/http';
import { Router } from '@angular/router';
import { Subject } from 'rxjs';
import { Bidding } from './bidding.model';


@Injectable({ providedIn: 'root' })
export class BiddingService {


  constructor(private http: HttpClient, private router: Router) { }


  submitBid(auctionId: string, currentBid: string, lastBidTimeStamp: Date, userId: string) {



    const bidding: Bidding = {
      id: auctionId,
      bidderId: userId,
      lastBidTimeStamp: lastBidTimeStamp,
      bidValue: currentBid
    };

    return this.http.patch(`http://localhost:3000/api/listings/${bidding.id}`, bidding,
    );

  }

}

app.js

app.use((req, res, next) => {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization");
res.header("Access-Control-Allow-Methods", "GET, POST, PATCH, PUT, DELETE, OPTIONS");
next();
});






   app.patch('/api/listings/:id', (req, res) =>
Post.update(
  {id: req.query.id},
  {currentBid: req.body.currentBid},
  {lastBidTimeStamp: req.body.lastBidTimeStamp},
 // {bidderId: req.userData.userId}
  ).then( user => {
  console.log(user);
  res.json(user);
  // res.sendStatus(200);
  })


.then( user => {
console.log(res.json(user));
res.json(user);
// res.sendStatus(200);
}).catch(err => console.log(err)));

Ответы [ 2 ]

0 голосов
/ 10 ноября 2019

Я получил его, работая со следующим запросом пут

app.put('/api/listings/:id', (req, res) => {

Post.findByIdAndUpdate({ _id: req.params.id},
  {
    currentBid: req.body.currentBid,
    lastBidTimeStamp: Date.now(),
    bidderId: req.body.bidderId
  }, function(err, docs) {
    if(err) res.json(err);
    else{
      console.log(docs)
  }
  });
});
0 голосов
/ 10 ноября 2019

Похоже, нет необходимости вызывать метод Post.update() внутри вашего метода. Кроме того, ваши данные поступают с лицевой стороны:

enter image description here

Как указано в документах express.js:

Направляет HTTP-запросы PUT на указанный путь с указанными функциями обратного вызова.

Таким образом, ваш код должен выглядеть следующим образом:

app.put('/api/listings/:id', (req, res) {        
   // Retrieve the data to insert from the PUT body
   var data = [
       req.body.id,
       req.body.bidderId,
       req.body.bidValue
   ];

   // Then you can do what you want with your data

});

Подробнееинформацию о том, как построить REST API, можно прочитать здесь.

...