首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Firebase云函数中处理糟糕的JSON?

如何在Firebase云函数中处理糟糕的JSON?
EN

Stack Overflow用户
提问于 2017-07-27 03:10:52
回答 3查看 4.5K关注 0票数 17

我正在创建一个使用firebase-cloud-functions的firebase应用程序。

index.js

代码语言:javascript
复制
exports.auth = functions.https.onRequest((request, response) => {
  response.status(200).send({
    status : "Some Status"
  });
}

这是非常简单的函数。我想在端点上使用一些有效负载发出一个POST请求。当我使用Firebase Cloud Function Emulator和带有bad json的POSTman测试应用程序接口时

代码语言:javascript
复制
{
    "phoneNumber: "9632725300"
}

服务器刚刚崩溃了!我的问题是如何处理像这样的firebase函数中的错误请求。

使用此错误

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-07-29 16:12:00

服务器没有崩溃。您向它发送了一个错误的请求(格式错误的JSON),它完美地响应了一个状态代码400,即"Bad Request“。

你宁愿改正你的JSON...

编辑:

如果您确实希望能够发送无效的JSON,可以通过绕过JSON正文解析器来实现。为此,您可以将请求更改为将内容类型标头设置为"text/plain“。此内容类型将使用文本正文解析器,它不会解析任何JSON。

请注意,这样做需要您自己处理JSON解析,但允许您自己使用try-catch来处理错误。

代码语言:javascript
复制
let json;
try {
    json = JSON.parse(json);
} catch (e) {
    // Handle JSON error.
}

摘自https://firebase.google.com/docs/functions/http-events

票数 4
EN

Stack Overflow用户

发布于 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块中,如下所示:

代码语言:javascript
复制
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是否正确,如果不是,您至少可以按照自己的方式处理错误。

希望这能有所帮助:)

票数 1
EN

Stack Overflow用户

发布于 2017-07-31 13:25:31

{\n\t"phoneNumber: "9632725300"\n}

从屏幕截图中,我看到JSON是无效的或格式错误的。它包含换行符(\n)和制表符(\t)。此外,键“JSON”没有用双引号括起来,这也会使phoneNumber无效。

下面是服务器应该接收的JSON的有效格式

代码语言:javascript
复制
{
    "phoneNumber": "9632725300"
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45335540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档