POST-запрос зависает (время ожидания) при попытке проанализировать тело запроса, запустив Koa в Firebase Cloud Functions - PullRequest
1 голос
/ 04 октября 2019

Я работаю на небольшом веб-сайте, обслуживаю статические файлы с помощью Firebase Hosting (FH) и переписываю все запросы в одну функцию в Firebase Cloud Functions (FCF), где я использую Koa (с koa-router) дляобрабатывать запросы. Однако, когда я пытаюсь проанализировать тело POST-запроса с помощью koa-bodyparser, служба просто зависает, пока не истечет время ожидания.

То же самое происходит при использовании других анализаторов тела, таких как 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), поэтому у меня не так много времени, и я не смогу предоставить вам многобольше, чем у меня уже есть.

Как мне получить данные?

1 Ответ

1 голос
/ 07 октября 2019

Firebase уже анализирует тело.
https://firebase.google.com/docs/functions/http-events#read_values_from_the_request

Похоже, что промежуточное программное обеспечение для анализа тела Koa не знает, что делать с "уже проанализированным" телом (то есть объект противunparsed string), поэтому промежуточное программное обеспечение в конечном итоге запутывается и выполняет какой-то бесконечный цикл.

Решение состоит в том, чтобы использовать ctx.req.body , потому что оно уже проанализировано. :)

Коа скалы!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...