http.post - получение данных ответа - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь сделать простой вызов http.post, а затем console.log данных.Я хочу использовать новейшие методы кодирования, поэтому я пытаюсь сделать это с помощью rxjs, поскольку он кажется мощным, эффективным и, надеюсь, перспективным.

Ранее я использовал .subscribe, но во всех угловых документах подписка отсутствует, поэтому я полагаю, что это старый метод и что он не самый лучший.

Я пробовал множество кода, вот несколько фрагментов ниже:

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

});

1 Ответ

0 голосов
/ 25 сентября 2018

Сначала попробуйте определить тип данных, которые вы ожидаете получить:

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

Вместо any вы можете определить интерфейс, соответствующий ожидаемым данным.

Я полагаю, что pipe() из более старых версий Angular (я не уверен), но просто используйте функцию subsribe(), так как метод post возвращает rxjs Observable<>()

Во-вторых, вы уверены, чтоURL возвращает данные?Я знаю, что «стандартные» конечные точки поста REST должны возвращать созданный объект, но это не обязательно.

...