Почему Firebase Cloud-Function отправляет обратно объект ошибки вместо реальных данных - PullRequest
0 голосов
/ 25 марта 2020

Я тестирую некоторые облачные функции Google локально, создав небольшое тестовое приложение на angular и облачную функцию. Я пытаюсь прочитать ответ обратно из Облако-функции, когда я делаю пост-запрос. Облачная функция затем возвращает ошибку с данными внутри нее, а не только с фактическими данными. Любопытно, что если я не подпишусь на ответ сервера, то я никогда не увижу ошибку в консоли, то есть это должна быть настройка самой облачной функции. Однако я скопировал и вставил код облачной функции прямо из документации. Пожалуйста, помогите.

TL; DR: Http Cloud-функция, возвращающая ошибку вместо данных, почему?

Вот код для функции облака:

exports.helloWorld = functions.https.onRequest((request, response) => {
response.header('Access-Control-Allow-Origin', '*');
response.status(200).send('poop');
});

Вот код для тестового поста:

    test() {
    var req = this.http
        .post(
            'http://localhost:5000/merchantapi-b7b17/us-central1/helloWorld',
            JSON.stringify({ poop: 'poop' })
        )
        .subscribe(_val => {
            console.log(_val);
        });
}

Вот ошибка, которую я получаю на консоли:

HttpErrorResponse

error: {error: SyntaxError: JSON Parse error: Unexpected identifier "poop", text: "poop"}

headers: HttpHeaders {normalizedNames: Map, lazyUpdate: null, lazyInit: function}

message: "Http failure during parsing for http://localhost:5000/merchantapi-b7b17/us-central1/helloWorld"

name: "HttpErrorResponse"

ok: false

status: 200

statusText: "OK"

url: "http://localhost:5000/merchantapi-b7b17/us-central1/helloWorld"

HttpErrorResponse Prototype
defaultErrorLogger — core.js:6014
handleError — core.js:6066
next — core.js:40558
(anonymous function) — core.js:35336
__tryOrUnsub — Subscriber.js:185
next — Subscriber.js:124
_next — Subscriber.js:72
next — Subscriber.js:49
next — Subject.js:39
emit — core.js:35298
run — zone-evergreen.js:124
onHandleError — core.js:39735
runTask — zone-evergreen.js:171
invokeTask — zone-evergreen.js:465
timer — zone-evergreen.js:2650
defaultErrorLogger — core.js:6014

Как видите, ошибка содержит данные, и я могу использовать это, но я хотел бы понять, почему он отправляет ошибку и как ее обработать sh.

1 Ответ

0 голосов
/ 25 марта 2020

По умолчанию современный HttpClient Angular ожидает ответа JSON, а строка 'p oop' не является допустимой JSON.

Чтобы исправить, вам нужно отправить действительный JSON вернуться к клиенту:

exports.helloWorld = functions.https.onRequest((request, response) => {
    response.header('Access-Control-Allow-Origin', '*');
    response.status(200).send({'message':'poop'});
});

Действительный json:

{
    "message": "poop"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...