【问题标题】:http.post - getting response datahttp.post - 获取响应数据
【发布时间】:2018-09-24 21:38:20
【问题描述】:

我正在尝试做一个简单的http.post 调用,然后console.log 数据。我想使用最新的编码技术,所以我尝试用 rxjs 来做这件事,因为它看起来功能强大、高效,并且有望面向未来。

我以前使用过.subscribe,但在所有angular 文档中都没有订阅,所以这让我相信它是一种较旧的方法并且它不是最好的。

我尝试了很多代码,下面是一些sn-ps:

import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
import { catchError, retry, tap, map } from 'rxjs/operators';
import { of } from 'rxjs';


readonly GCF_newReq_URL = 'https://us-eastern.my-app.cloudfunctions.net/newRequest';


async submitHandler(formDirective: FormGroupDirective) {

    this.loading = true;
    const formValue = this.reqForm.value;

    this.http.post(this.GCF_newReq_URL, formValue)
        .pipe(
            tap(res => console.log(res)),
            retry(3),
            catchError(err => {
                console.log(err)
                return of(err);
            }),
            map(res => console.log(res))
        )
        .subscribe(res => {
            console.log(res);
        });

}

我试过maptap、事件.subscribe,但我什么也说不出来,它只是说:message: "Http failure during parsing for https://us-eastern.my-app.cloudfunctions.net/newRequest"

这应该很简单,我一定是把它复杂化了,但是我找不到任何像样的文档。

编辑,添加云功能代码

import * as functions from 'firebase-functions';
const cors = require('cors')({ origin: true });

import * as admin from 'firebase-admin';
admin.initializeApp();


export const newRequest = functions.https.onRequest((request, response) => {

    return cors(request, response, () => {
        const data = request;

        if (!data) {
            response.status(400).send('ERROR you must supply data');
        }

        response.status(200).send("Hello from Firebase!");
    });

});

【问题讨论】:

  • 请求格式似乎不正确,请检查您发送和接收的数据。其次,返回控制台的map 运算符似乎不正确。我会摆脱它。

标签: angular rxjs httprequest angular6


【解决方案1】:

首先,尝试定义您希望返回的数据类型:

this.http.post<any>(url, {}).subscribe((data) => { console.log(data); }, (error) => { console.error(error); });

您可以定义一个与您期望的数据匹配的接口,而不是any

我相信 pipe() 来自较旧的 Angular 版本(我不确定),但只需使用 subsribe() 函数作为 post 方法返回一个 rxjs Observable&lt;&gt;()

第二,你确定URL返回数据吗?我知道“标准”REST post 端点应该返回创建的对象,但这不是必需的。

【讨论】:

  • 您好,谢谢您的回答!我将云功能代码添加到原始问题的底部。所以,它应该返回“Hello from Firebase!”
  • 在我的云功能中,我将send("Hello from Firebase!") 更改为send({message: "Hello from Firebase!"}),在subscribeing 之后,它似乎解决了我遇到的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多