Firebase函数在Express处理请求之前解析请求体。

5
我尝试在Firebase函数中处理无效请求,使用带有无效JSON的post请求,以便在express中处理它。但是,在它到达express层之前,我收到了400错误“SyntaxError:JSON中的位置20处出现意外令牌a”,最糟糕的是该函数运行60秒,直到它超时引发错误。
我的函数
import * as functions from 'firebase-functions';
import * as express from 'express';
import * as admin from 'firebase-admin';

admin.initializeApp();


const app = express();

app.use((err: any, req: any, res: any, next: any) => {
  res.json({ error: 'invalid request' });
  next(err);
});

app.post('/test', (req: any, res: any) => {
  res.json({ error: 'invalid request' });
  res.end();
  return;
});



const server = functions.runWith({ maxInstances: 100 }).https.onRequest(app);

export { server as api };

无效的JSON。
{
    "es":"adfasdf"asdf
}

我猜这与 "This parsing is done by the following body parsers:" 所述的 https://firebase.google.com/docs/functions/http-events#read_values_from_the_request 有关。

尝试将导入更改为 import express from 'express'; - Dharmaraj
@Dharmaraj 同样的错误,除此之外文档明确表示如果内容类型为“Content-Type:application/json”,则数据将由'jsonParser'解析,然后'Sent data would be materialized under ...etc',请检查我提到的链接。 - BluePie
1个回答

6
Firebase Functions是建立在functions-framework-nodejs包的基础上的(或者至少是同一代码的内部变体)。 在该包中,您提到的正文解析器被注入。正如您正确地推测的那样,这些确实是在您的代码甚至有机会执行之前添加的。
由于错误是Firebase操作的内部问题,您需要直接联系Firebase支持

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接