http.post-获取响应数据

时间:2018-09-24 21:38:21

标签: angular rxjs httprequest angular6

我正在尝试进行一个简单的http.post调用,然后console.log记录数据。我想使用最新的编码技术,因此我尝试使用rxjs进行此操作,因为它似乎功能强大,高效并且可以保证未来发展。

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

我尝试了很多代码,下面是一些片段:

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

});

1 个答案:

答案 0 :(得分:0)

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

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

您可以定义一个与所需数据匹配的接口来代替any

我相信pipe()来自较旧的Angular版本(我不确定),但是只需使用subsribe()函数,因为post方法将返回rxjs Observable<>()

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