角度POST请求-错误读取响应

时间:2018-09-25 18:27:17

标签: node.js api firebase http google-cloud-functions

我的情况很简单。我在Google Cloud Functions中调用了一个端点,它发送了一个简单的响应。我尝试console.log。

角组件

async submitHandler(formDirective: FormGroupDirective) {
    this.loading = true;

    const formValue = JSON.stringify(this.reqForm.value);

    this.http.post('https://myApp.cloudfunctions.net/myEndpoint', formValue)
        .subscribe(res => {
            console.log(res);
            this.success = true;
            formDirective.resetForm();
        }, 
        (err) => { console.log(err) });

    this.loading = false;
}

Google Cloud Function

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

const admin = require('firebase-admin');
admin.initializeApp();

exports.myEndpoint = functions.https.onRequest((req, res) => {

    return cors(req, res, () => {


        const body = JSON.parse(req.body);
        const name = body.name;
        console.log("REQUEST BODY >>> ", body);
        console.log("REQUEST NAME >>> ", name);


        if (!name) {
            res.status(400).send('missing name!')
        }


        res.send(name.split('').reverse().join(''))

    });

});

云功能以name字段反转为响应。因此,"name": "Kenny"将以"ynneK"进行响应。这就是我console.log(res)在前端看到的内容。

这是我的前端错误

HttpErrorResponse {headers: HttpHeaders, status: 200, statusText: "OK", url: "https://myApp.cloudfunctions.net/myEndpoint", ok: false, …}
error: {error: SyntaxError: Unexpected token l in JSON at position 0 at JSON.parse (<anonymous>) at XMLHttp…, text: "llaH ynneK"}
headers: HttpHeaders {normalizedNames: Map(0), lazyUpdate: null, lazyInit: ƒ}
message: "Http failure during parsing for https://myApp.cloudfunctions.net/myEndpoint"
name: "HttpErrorResponse"
ok: false
status: 200
statusText: "OK"
url: "https://myApp.cloudfunctions.net/myEndpoint"
__proto__: HttpResponseBase

正如您在“错误:{..” 的第二行中所见,我有text: "llaH ynneK"}。因此,我认为这不是服务器问题,而是本地Angular问题。

我在做什么错?是否应该在云函数端点中将响应标头设置为application / json?我不确定我在做什么错。

流为:

  1. JSON.stringify表单数据并发送后请求(似乎是唯一的工作方式)

  2. GCF端点获取它并JSON.parse(req.body)

  3. 端点执行此操作,然后发送回客户端res.send()

  4. 客户端获得响应以确保一切正常,但是尝试读取时会发生错误。

感谢您的帮助。

0 个答案:

没有答案