繁体   English   中英

HTTP post 请求不断发送空正文

[英]HTTP post request keeps sending an empty body

我正在向我的服务器发送一个 post 请求,从服务器端,我只得到一个空的正文。

我的客户有角度。

这是发送请求的服务的代码:

public constructor(private http: HttpClient) { }

  public addImagePair(gameName: string, originalImage: File, modifiedImage: File): Observable<ICommonImagePair> {
    const formData: FormData = new FormData();
    formData.append("name", gameName);
    formData.append("originalImage", originalImage);
    formData.append("modifiedImage", modifiedImage);

    new Response(formData).text().then(console.log);
    return this.http.post<ICommonImagePair>(this.BASE_URL + "image-pair", formData);
  }

  public addGameCard(gameName: string, imagePairId: string, pov: POVType): Observable<ICommonGameCard> {
    const formData: FormData = new FormData();
    formData.append("name", gameName);
    formData.append("image-pair-id", imagePairId);
    formData.append("pov", "Simple");

    new Response(formData).text().then(console.log);
    return this.http.post<ICommonGameCard>(this.BASE_URL + "gamecard", formData);
  }

下面是调用服务的组件的代码:

public addImagePair(): void {
    this.simplePOVGameGeneratorService.addImagePair(this.gameName, this.originalImageFile, this.modifiedImageFile)
      .subscribe((imagePair: ICommonImagePair) => {
        this.simplePOVGameGeneratorService.addGameCard(imagePair.name, imagePair.id, POVType.Simple)
          .subscribe((gameCard: ICommonGameCard) => {
            console.log(gameCard);
          });
      });
  }

在我的组件中,我首先请求addImagePair() ,它确实发送了一个没有任何问题的请求。 然后,我用几乎相同的代码调用addGameCard()并且不知何故主体是空的。 我在发出请求之前控制台日志以确保确实有数据。 我还在服务器上控制台登录,正文是空的。 这到底是什么原因造成的?

您可以使用flatMap运算符而不是手动订阅嵌套的 observables,如下所示 -

public addImagePair(): void {
    this.simplePOVGameGeneratorService.addImagePair(this.gameName, this.originalImageFile, this.modifiedImageFile)
      .flatMap((imagePair: ICommonImagePair) => this.simplePOVGameGeneratorService.addGameCard(imagePair.name, imagePair.id, POVType.Simple))
       .subscribe((gameCard: ICommonGameCard) => {
            console.log(gameCard);
          });
      });
  }

您还可以将 post 方法中的数据作为字符串文字而不是FormData传递,例如 formdata = { "name":gameName,"image-pair-id":imagePairId,"pov": "Simple"}然后使用return this.http.post<ICommonImagePair>(this.BASE_URL + "image-pair", JSON.stringify(formData)); addGameCard方法中。

暂无
暂无

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

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