我在一个小网站上工作,使用Firebase托管(FH)提供静态文件,并将所有请求重写为Firebase Cloud Functions (FCF)上的单个函数,在那里我使用Koa (与koa-router)来处理请求。然而,当我尝试使用koa-bodyparser解析POST请求的正文时,服务就会挂起,直到它最终超时。
使用其他主体解析器时也会发生同样的情况,例如koa- body,而且无论我将解析器放在哪里,它似乎都会持续存在,除非我将它放在路由器之后,在这种情况下,问题就消失了,尽管我仍然无法访问数据,因为它从来没有机会被解析(?)。
以下是导致问题的代码的精简版本:
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())我仍然是所有这些工具的新手,我可能遗漏了一些非常明显的东西,但我似乎找不到解决方案。如果我没记错的话,FCF会自动解析请求,但Koa无法访问数据,除非它自己进行解析,所以我认为FCF的自动解析和Koa使用的解析器之间出了问题。
除了网关超时(504)之外,我还不能产生任何实际的错误或有用的错误消息,所以我没有太多东西可以继续,也不能为您提供比我已经拥有的更多的信息。
我该如何着手获取数据?
发布于 2019-10-07 08:40:38
Firebase已经解析了正文。
https://firebase.google.com/docs/functions/http-events#read_values_from_the_request
看起来,提供的Koa body解析中间件不知道如何处理“已解析”的body (即对象与未解析的字符串),因此中间件最终会感到困惑,并进行某种类型的无限循环。
一种解决方案是使用ctx.req.body,因为它已经被解析。:)
Koa太棒了!
https://stackoverflow.com/questions/58237305
复制相似问题