尝试解析请求正文时,POST 请求挂起(超时),在 Firebase Cloud Functions 上运行 Koa

1 node.js firebase typescript koa google-cloud-functions

我正在一个小型网站上工作,使用 Firebase 托管 (FH) 提供静态文件,并将所有请求重写为 Firebase Cloud Functions (FCF) 上的单个函数,我使用 Koa(带有 koa-router)来处理请求. 但是,当我尝试使用 koa-bodyparser 解析 POST 请求的正文时,该服务只是挂起,直到它最终超时。

使用其他主体解析器(例如 koa-body)时也会发生同样的事情,并且无论我将解析器放在哪里,它似乎都会持续存在,除非我将它放在路由器之后,在这种情况下问题就会消失,尽管我仍然可以” t 访问数据,因为它永远没有机会被解析(?)。

以下是导致问题的代码的精简版本:

import * as functions from 'firebase-functions'
import * as Koa from 'koa'
import * as KoaRouter from 'koa-router'
import * as KoaBodyParser from 'koa-bodyparser'

const app = new Koa()
const router = new KoaRouter()

app.use(KoaBodyParser())

router.post('/', (context) => {
  // do some stuff with the data
})

app.use(router.routes())

export const serve = functions.https.onRequest(app.callback())
Run Code Online (Sandbox Code Playgroud)

我对所有这些工具仍然很陌生,我可能会遗漏一些非常明显的东西,但我似乎无法在任何地方找到解决方案。如果我没记错的话,FCF 会自动解析请求,但是 Koa 无法访问该数据,除非它自己进行解析,所以我认为 FCF 的自动解析和 Koa 使用的解析器之间出了问题。

除了网关超时 (504) 之外,我无法产生任何实际错误或有用的错误消息,因此我没有太多事情要做,也无法为您提供更多信息有。

如何获取数据?

Tom*_*Tom 5

Firebase 已经解析了正文。
https://firebase.google.com/docs/functions/http-events#read_values_from_the_request

似乎提供的 Koa 正文解析中间件不知道如何处理“已解析”的正文(即对象与未解析的字符串),因此中间件最终会变得混乱并进行某种无限循环。

一个解决方案是使用ctx.req.body因为它已经被解析了。:)

考阿摇滚!

  • 这次真是万分感谢。我为此花费了一整天的时间。这需要更多的关注。 (3认同)