【问题标题】:Configure Firebase Function to accept HAL+JSON as request body配置 Firebase 函数以接受 HAL+JSON 作为请求正文
【发布时间】:2018-06-28 05:02:42
【问题描述】:

在 Firebase 中使用 HTTP 触发的函数时,我无法从 HTTP 请求访问 HAL+JSON 负载。

请求看起来像:

POST /endpoint
Content-Type: application/hal+json

{ /* some payload */ }

在我的函数中,我使用request.body 访问有效负载,如下所示:

...
var myPayload = request.body;
...

myPayload 的值为:

{}

相反,当 HTTP 请求包含Content-Type: application/json 时,myPayload 的值是正确的:

{ /* some payload */ }

我认为它与以下内容有关:express.json()

有没有办法在 Firebase 中配置 express 以包含 application/hal+json?例如:

express.json({
  type: [ 'application/json', 'application/hal+json' ]
});

或者自己访问原始身体?

注意:我不想在函数中创建快速应用程序。

【问题讨论】:

    标签: firebase google-cloud-functions


    【解决方案1】:

    请参阅the documentation,了解 Cloud Functions 如何自动处理传入请求。

    Cloud Functions 解析 application/json 的请求正文内容类型 和 application/x-www-form-urlencoded 根据描述的规则 更多。纯文本内容类型(text/plain)作为 使用 UTF-8 作为默认编码(或自定义编码)的字符串 在内容类型标头中提供)。

    对于其他内容类型,rawBody 属性包含未解析的 请求正文的字节作为 Buffer 对象。

    您的“其他内容类型”在这里可能意味着您的原始请求正文将可从 rawBody 属性中的 Request 对象获得。

    【讨论】:

    • 谢谢@doug-stevenson。不幸的是,当使用Content-Type: application/hal+json 时它不起作用:req.rawBodyundefined。如果我尝试Content-Type: text/plain,那么req.rawBody 包含一个缓冲区。当payload为HAL+JSON时,貌似没有解析器设置req.rawBody
    • 有没有办法访问当前的快递应用程序并执行以下操作? npmjs.com/package/…
    • 这个呢? issuetracker.google.com/issues/36252545 显然评论 #39 中描述的解决方案尚未实施。
    • 我无法重现。当我将数据发送到记录bodyrawBody 的简单https 函数并使用curl 调用它时,我看到了这两个值。 curl -X POST -H "Content-Type:application/hal+json;charset=UTF-8" -d '{"message":"Hello World!"}' https://us-central1-.../myFunctions
    • 如果您认为还有问题,请提供任何人都可以使用的确切代码和重现说明。
    猜你喜欢
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    • 2019-08-11
    • 2012-03-06
    • 2020-07-31
    • 2014-07-04
    • 1970-01-01
    • 2018-03-27
    相关资源
    最近更新 更多