【问题标题】:req.body is empty prototype in onRequest firebase cloud functions (With multer)req.body 是 onRequest firebase 云函数中的空原型(使用 multer)
【发布时间】:2020-09-27 05:53:23
【问题描述】:

在我的云功能中:

const app = express();
app.use(multer().array());
app.post("/", (req, res) => {
  console.log("hit", req.body.from);
  console.log("hit", req.body.from);
  return res.sendStatus(200);
});

const emailInboundWebhook = functions.https.onRequest(app);

module.exports = {
  emailInboundWebhook
}

我在日志中得到了这个:

i  functions: Beginning execution of "emailInboundWebhook"
>  hit undefined
>  hit undefined
i  functions: Finished "emailInboundWebhook" in ~1s

但是当同一个端点用作快递应用时(云功能之外):

const express = require("express");
const app = express();
const multer = require('multer');

app.get("/", async (req, res) => {
  res.status(200).json({foo: "Bar"});
})
app.use(multer().array());
app.post("/webhook", async (req, res) => {
  console.log("hit",req.body.to);
  console.log("hit",req.body.from);
  res.sendStatus(200);
});

app.listen(80, () => {
  console.log("App listening on 80");
})

给出这个:

hit a@some-email-inbound.some.url
hit Rahul Priyadarsi <myemailid@gmail.com>

这两个结果是针对发送的同一封电子邮件,这些函数作为 sendgrid webhook 触发,它们发送 multipart/form-data POST 请求,其中包含从 myemailid@gmail.com 发送到 a@some-email-inbound.some.url 的电子邮件的详细信息

我不知道为什么这两个结果不同(我正在通过 ngrok 测试它们,并且由于控制台日志行运行,显然该函数被命中)。

【问题讨论】:

    标签: google-cloud-functions webhooks sendgrid


    【解决方案1】:

    我遇到了同样的问题。 看看这个问题:https://github.com/expressjs/multer/issues/572

    从 Multer 切换到 Busboy,也是一个不错的选择。

    一件事:在这种情况下,请使用 https.Request(来自云功能)而不是 Request from express。

    【讨论】:

      猜你喜欢
      • 2018-12-06
      • 2017-01-14
      • 1970-01-01
      • 2021-01-12
      • 1970-01-01
      • 2017-01-28
      • 1970-01-01
      • 2022-09-26
      • 2021-02-15
      相关资源
      最近更新 更多