我正在创建一个使用firebase-cloud-functions的firebase应用程序。
index.js
exports.auth = functions.https.onRequest((request, response) => {
response.status(200).send({
status : "Some Status"
});
}这是非常简单的函数。我想在端点上使用一些有效负载发出一个POST请求。当我使用Firebase Cloud Function Emulator和带有bad json的POSTman测试应用程序接口时
{
"phoneNumber: "9632725300"
}服务器刚刚崩溃了!我的问题是如何处理像这样的firebase函数中的错误请求。
使用此错误

发布于 2017-07-29 16:12:00
服务器没有崩溃。您向它发送了一个错误的请求(格式错误的JSON),它完美地响应了一个状态代码400,即"Bad Request“。
你宁愿改正你的JSON...
编辑:
如果您确实希望能够发送无效的JSON,可以通过绕过JSON正文解析器来实现。为此,您可以将请求更改为将内容类型标头设置为"text/plain“。此内容类型将使用文本正文解析器,它不会解析任何JSON。
请注意,这样做需要您自己处理JSON解析,但允许您自己使用try-catch来处理错误。
let json;
try {
json = JSON.parse(json);
} catch (e) {
// Handle JSON error.
}发布于 2017-07-30 02:53:00
您正在经历的实际上并不是服务器崩溃。事实上,从技术上讲,通过使用Cloud Functions,您不会有服务器崩溃。(For this reason they're called "Serverless Infrastructure")您在Cloud Functions上执行的每个请求/操作都有点像一个全新的服务器。这就是云函数的奇妙之处所在。(这是一个过于简单的解释,我建议多读一点,以便更深入地解释)
话虽如此,据我所知,您正在尝试确定您得到的JSON是否无效(坏)。有时,当我必须连接一堆外部服务时,很少,但有时,它们会返回一个糟糕的JSON,我的Cloud函数无法解析,因此会抛出一个错误。
解决方案是将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是否正确,如果不是,您至少可以按照自己的方式处理错误。
希望这能有所帮助:)
发布于 2017-07-31 13:25:31
{\n\t"phoneNumber: "9632725300"\n}
从屏幕截图中,我看到JSON是无效的或格式错误的。它包含换行符(\n)和制表符(\t)。此外,键“JSON”没有用双引号括起来,这也会使phoneNumber无效。
下面是服务器应该接收的JSON的有效格式
{
"phoneNumber": "9632725300"
}https://stackoverflow.com/questions/45335540
复制相似问题