【问题标题】:Angular Service not passing values to backend - Header Error issueAngular Service 未将值传递给后端 - 标头错误问题
【发布时间】:2020-03-06 01:30:13
【问题描述】:

我无法弄清楚为什么我的值没有从 Angular 服务传递到 express/mongoose PATCH 调用。它进入表格中的文档,但将 currentBid 更新为 null 并且 lastBidTimeStamp 和 bidderId 不会更新。

如果我像这样使用邮递员:

https://postimg.cc/1nQnX3zK

这两个值也不会以这种方式更新。邮递员中只有 currentBid 更新。

我在服务中执行了 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)));

【问题讨论】:

  • 尝试使用PUT方法,而不是PATCH方法
  • 我将其更新为 PUT on service 和 app.js ,但同样的问题
  • 因此请检查您是否在此行 return this.http.patch 之前发送了正确的 PATCH 方法主体,例如 console.log(bidding)
  • 如果我 console.log(bidding) 我得到:postimg.cc/HV4Z3BRY
  • 所以在 Angular 端看起来没问题 - 你的参数发送正确,你需要在后端正确接受你的参数。试试改成app.put('/api/listings/:id', (req, res) =>

标签: angular express mongoose


【解决方案1】:

看起来没有必要在你的方法中调用Post.update() 方法。 此外,您的数据来自前端:

As docs of express.js says:

将 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

});

More info about how to build REST API is can be read here.

【讨论】:

    【解决方案2】:

    我让它与以下放置请求一起工作

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-25
      • 2017-09-19
      • 2019-07-30
      • 1970-01-01
      • 2015-02-08
      • 2016-09-06
      • 2012-12-09
      • 2015-05-20
      相关资源
      最近更新 更多