req.on('end') 没有运行 Firebase express Node.js Nylas

Posted

技术标签:

【中文标题】req.on(\'end\') 没有运行 Firebase express Node.js Nylas【英文标题】:req.on('end') not running Firebase express Node.js Nylasreq.on('end') 没有运行 Firebase express Node.js Nylas 【发布时间】:2021-01-02 16:13:41 【问题描述】:

我正在尝试使用 Nylas 创建 webhook,在他们的 example 中,有一个中间件(代码如下)。我正在使用 Firebase 端点,我的代码是用打字稿编写的。我尝试使用 ngrok 在新项目中本地复制 Nylas 示例,中间件成功返回 200 状态。但是,当我在 Firebase 函数中使用完全相同的代码时,中间件在 req.on('end 处停止并且超时,所以我收到 console.log('2') 而不是 console.log('3')。 Firebase 声称,在设置计费之前,第三方服务受到限制。这会影响中间件吗?为什么req.on('end 没有触发?

  req.rawBody = "";
  console.log("1");
  req.on("data", (chunk) => (req.rawBody += chunk));
  req.on("error", (err) => res.status(500).send("Error parsing body"));
  console.log("2");
  req.on("end", () => 
    console.log("3");
    // because the stream has been consumed, other parsers like bodyParser.json
    // cannot stream the request data and will time out so we must explicitly parse the body
    try 
      console.log("4");
      req.body = JSON.parse(req.rawBody);
      console.log(req.body);
      next();
     catch (err) 
      res.status(500).send("Error parsing body");
    
  );
);
app.use(bodyParser.urlencoded( limit: "5mb", extended: true ));

【问题讨论】:

您实际上是在向 Nylas 发出请求,还是只是在测试中间件?如果您提出请求,确实需要启用计费。 好吧,最终我会向 Nylas 发出请求,但目前在中间件中超时。这不应该发生,因为它只通过了req.rawBody。我假设中间件只负责解析数据,但我没有其他猜测为什么它会超时,因为当我在本地 ngrok 上运行中间件时它工作得很好。只有当我在 firebase 函数下运行它时,它才会超时。我可以看到计费是如何成为一个问题的,但对于中间件来说不是那么多。你知道发生了什么吗? 【参考方案1】:

解决方案:

使用this approach解析数据,得到状态200。

【讨论】:

以上是关于req.on('end') 没有运行 Firebase express Node.js Nylas的主要内容,如果未能解决你的问题,请参考以下文章

vue 利用js模拟接收表单数据

JS各种语法

在vue-cli搭建的项目中在后台mock接口中支持req.body和req.cookies

koa post 提交数据 koa-bodyparser 中间件的使用

在接收图像时处理客户端请求中的元数据

Stripe 和 Firebase:FirebaseError:collection() 的第一个参数应为 CollectionReference、DocumentReference 或 Fireba