我的情况很简单。我在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?我不确定我在做什么错。
流为:
JSON.stringify
表单数据并发送后请求(似乎是唯一的工作方式)
GCF端点获取它并JSON.parse(req.body)
端点执行此操作,然后发送回客户端res.send()
客户端获得响应以确保一切正常,但是尝试读取时会发生错误。
感谢您的帮助。