最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

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

运维笔记admin6浏览0评论

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

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

我正在一个小型网站上工作,使用Firebase Hosting(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)之外,我没有产生任何实际的错误或有用的错误消息,所以我没有太多事情要做,并且不能为您提供更多的信息。我已经有。

我如何获取数据?

回答如下:

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

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

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

Koa岩石!

发布评论

评论列表(0)

  1. 暂无评论