req.body 在 nodemailer 中未定义
Posted
技术标签:
【中文标题】req.body 在 nodemailer 中未定义【英文标题】:req.body is undefined in nodemailer 【发布时间】:2021-02-16 18:40:44 【问题描述】:我有一个问题,。
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
我做错了什么?
谢谢。
【问题讨论】:
有没有试过调试,看到服务端从客户端收到的参数? 【参考方案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。以上是关于req.body 在 nodemailer 中未定义的主要内容,如果未能解决你的问题,请参考以下文章
在vue-cli搭建的项目中在后台mock接口中支持req.body和req.cookies