我正在尝试进行一个简单的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);
});
}
我尝试了map
,tap
,事件.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!");
});
});
答案 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发布端点应该返回创建的对象,但这不是必需的。