我正在创建一个使用firebase-cloud-functions的firebase应用程序。
index.js
exports.auth = functions.https.onRequest((request, response) => {
response.status(200).send({
status : "Some Status"
});
}
这是非常简单的功能。我想在端点上用一些有效负载发出POST
请求。当我使用Firebase云功能模拟器和带有bad json
{
"phoneNumber: "9632725300"
}
服务器刚刚崩溃!我的问题是如何处理像这样的firebase函数中的错误请求。
答案 0 :(得分:4)
服务器没有崩溃。你发送了一个错误的请求(格式错误的JSON),并且它的状态代码为400,这是“错误的请求”。
你宁愿纠正你的JSON ......
编辑:
如果您真的希望能够发送无效的JSON,可以绕过JSON正文解析器。为此,您可以更改您的请求以将内容类型标头设置为“text / plain”。此内容类型将使用文本正文解析器,它不会解析任何JSON。
请注意,这样做会要求您自己处理JSON解析,但允许使用try-catch自行处理错误。
let json;
try {
json = JSON.parse(json);
} catch (e) {
// Handle JSON error.
}
答案 1 :(得分:1)
您遇到的实际上并不是服务器崩溃。事实上,从技术上讲,通过使用云功能,您不会让服务器崩溃。 (For this reason they're called "Serverless Infrastructure")您在云功能上执行的每个请求/操作都有点像一个全新的服务器。实际上,这对云功能来说实际上是多么奇妙。 (这是一个过于简化的解释,我建议阅读更多关于它的更多深入解释)
话虽如此,据我所知,你试图弄清楚你得到的JSON是否无效(坏)。偶尔,当我不得不连接一堆外部服务时,很少,但有时候,它们会返回我的云功能无法解析的错误JSON,因此会抛出错误。
解决方案是将您的JSON.parse放入一个单独的函数和一个try / catch块,如下所示:
function safelyParseJSON (json) {
var parsed;
try {
parsed = JSON.parse(json);
} catch (e) {
// BAD JSON, DO SOMETHING ABOUT THIS HERE.
}
return parsed; // will be undefined if it's a bad json!
}
function doSomethingAwesome () {
var parsedJSON = safelyParseJSON(data);
// Now if parsedJSON is undefined you know it was a bad one,
// And if it's defined you know it's a good one.
}
使用此辅助函数,如果您必须处理大量外部JSON资源,您可以轻松确定您尝试解析的JSON是否良好,如果不是,您至少可以处理错误你的方式。
希望这会有所帮助:)
答案 2 :(得分:0)
{\n\t"phoneNumber: "9632725300"\n}
从屏幕截图中,我看到JSON无效或格式错误。它包含换行符(\ n)和制表符空格(\ t)字符。此外,关键" phoneNumber"没有用双引号括起来,这再次使JSON无效。
这是服务器应该接收的有效JSON格式
{
"phoneNumber": "9632725300"
}