Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角度服务未向后端传递值-标头错误问题_Angular_Express_Mongoose - Fatal编程技术网

Angular 角度服务未向后端传递值-标头错误问题

Angular 角度服务未向后端传递值-标头错误问题,angular,express,mongoose,Angular,Express,Mongoose,我不明白为什么我的值没有从angular服务传递到express/mongoose补丁调用。它将其保存到表中的文档,但将currentBid更新为null,将lastBidTimeStamp和bidderId更新 如果我像这样使用邮递员: 这两个值也不会以这种方式更新。只有邮递员中的currentBid更新 我在服务中创建了console.log(lastBidTimeStamp),它正确地输出了日期,所以它在服务中接收值 不知道我做错了什么。还在学习。感谢您的帮助 投标服务 import {

我不明白为什么我的值没有从angular服务传递到express/mongoose补丁调用。它将其保存到表中的文档,但将currentBid更新为null,将lastBidTimeStamp和bidderId更新

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

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

我在服务中创建了console.log(lastBidTimeStamp),它正确地输出了日期,所以它在服务中接收值

不知道我做错了什么。还在学习。感谢您的帮助

投标服务

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

看起来不需要在方法内部调用
Post.update()
方法。 此外,您的数据来自前端:

将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

});

我通过以下put请求获得了它

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

尝试使用
PUT
方法,而不是
PATCH
方法我将其更新为放到service和app.js上,但同样的问题是检查您是否发送了正确的补丁方法体,如
console.log(bidding)
在此行之前
如果我是console.log(bidding),则返回此.http.PATCH
我明白了:所以在角度端看起来没问题——你们的参数发送正确,你们需要在后端正确地接受你们的参数。尝试更改为
app.put('/api/listings/:id',(req,res)=>