【问题标题】:req.body is undefined in nodemailerreq.body 在 nodemailer 中未定义
【发布时间】:2021-02-16 18:40:44
【问题描述】:

我有一个问题,req.body 在 nodemailer 中未定义。

React:我已经编写了整个函数,并且所有数据都正确传递。 console.log(data) 给了我正确的对象。

 axios
  .post(`${this.state.API_URL}/email/send`, JSON.stringify(data))
  .then((response) => {
  });

Express:只是 nodemailer 的重要部分。

const express = require("express");
const bodyParser = require("body-parser");
const app = express();
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
const emailRoute = require("./routes/api/emailRoute");
app.use("/email", emailRoute);

邮件路由:

 router.post("/send", async (req, res) => {
  const EmailAddress = process.env.EMAIL_ADDRESS;
  const transporter = nodemailer.createTransport({
    service: "hotmail",
    auth: {
      user: EmailAddress,
      pass: process.env.EMAIL_PASS,
    },
  });

  await transporter.sendMail(
    {
      from: req.body.email,
      to: EmailAddress,
      subject: "Email from app",
      text: `name: ${req.body.name} 
      current-role: ${req.body.role} 
      sports-car: ${req.body.enthusiast} 
      comment: ${req.body.comment}`,
    },
    (err, data) => {
      if (err) {
        res.sendStatus(503).json(err);
      } else {
        res.sendStatus(200).json("email sent");
      }
    }
  );
});

我正在将电子邮件发送到我的电子邮件帐户,但这是我收到的。

from [unknown]
      name: undefined
      current-role: undefined
      sports-car: undefined
      comment: undefined

我做错了什么?

谢谢。

【问题讨论】:

  • 有没有试过调试,看到服务端从客户端收到的参数?

标签: json undefined nodemailer body-parser req


【解决方案1】:

我终于让它工作了。所以没有 JSON.stringify(data) 只是 axios 中的数据。

 axios
.post(`${this.state.API_URL}/email/send`, data)
.then((response) => {
});

在 emailRoute 中

  const EmailAddress = process.env.EMAIL_ADDRESS;
 const transporter = nodemailer.createTransport({
service: "hotmail",
auth: {
  user: EmailAddress,
  pass: process.env.EMAIL_PASS,
},
});


 await transporter.sendMail(
{
  from: EmailAddress,
  to: EmailAddress,
  subject: "Email from app",
  text: 
 `name: ${req.body.name} 
  email: ${req.body.email}
  current-role: ${req.body.role} 
  sports-car: ${req.body.enthusiast} 
  comment: ${req.body.comment}`,
 }

“用户”和“发件人”的电子邮件地址应该相同。我以为我可以使用发件人的电子邮件作为我从 React 中的表单获得的“发件人”,但我想不是。对于我的情况,我从我的同一个电子邮件帐户发送和接收电子邮件,我只是在“文本”中传递发件人的电子邮件地址。

【讨论】:

    【解决方案2】:

    您必须在每个路由器中使用正文解析器! 因此,如果您没有将其添加到电子邮件路由,请添加它! 万事如意

    【讨论】:

    • 导入所有内容后仍然是相同的结果。这是你的意思还是我必须将 body-parser 作为参数或其他东西传递?到router.post?常量表达 = 要求(“表达”); const bodyParser = require("body-parser");常量应用程序 = 快递(); app.use(bodyParser.urlencoded({extended: false })); app.use(bodyParser.json());常量路由器 = express.Router();常量 nodemailer = 要求(“nodemailer”);需要("dotenv").config();
    • OK 首先你能指定你拥有的文件吗
    • 你不必这样做,但作为一个论点,这将成为一个错误
    • 对不起,英语不是我的语言
    • 在问题中,我有一个反应组件,我在其中进行 axios 调用,server.js 具有所有后端,emailRoute 具有 nodemailer。我在 server.js 和 emailRoute.js 中都导入了 body-parser。
    猜你喜欢
    • 2012-02-28
    • 2016-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多