Json NodeEmailer中未定义req.body
我对nodeEmailer中未定义req.body有一个问题Json NodeEmailer中未定义req.body,json,undefined,nodemailer,body-parser,req,Json,Undefined,Nodemailer,Body Parser,Req,我对nodeEmailer中未定义req.body有一个问题 const express = require("express"); const bodyParser = require("body-parser"); const app = express(); app.use(bodyParser.urlencoded({ extended: false })); app.use(bodyParser.json()); const emailRoute
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);
反应:我已经编写了整个函数,并且所有数据都正确传递。log(数据)为我提供了正确的对象
axios
.post(`${this.state.API_URL}/email/send`, JSON.stringify(data))
.then((response) => {
});
快报:这只是NodeEmailer的重要部分
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
我做错了什么
谢谢。您必须在每个路由器中使用Body解析器! 所以,如果您没有将其添加到电子邮件路由,请添加它!
尽管如此,我终于让它工作了。因此,没有JSON.stringify(数据),只有axios中的数据
axios
.post(`${this.state.API_URL}/email/send`, data)
.then((response) => {
});
在电子邮件的路线上
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中的表单中得到的“发件人”,但我想不行。就我的情况而言,我从我的同一个电子邮件帐户发送和接收电子邮件,我只是在“文本”中传递发件人的电子邮件地址。导入所有内容后,结果仍然相同。这就是你的意思,还是我必须将主体解析器作为参数传递?到路由器。邮局?const express=要求(“express”);const bodyParser=require(“body parser”);常量app=express();use(bodyParser.urlencoded({extended:false}));use(bodyParser.json());const router=express.router();const nodemailer=require(“nodemailer”);require(“dotenv”).config();好的,首先,你可以指定你拥有的文件,你不必指定,但作为一个参数,这会导致一个错误。对不起,英语不是我的语言。在这个问题上,我有一个react组件,我在其中调用axios,server.js,它有所有的后端和emailRoute,它有nodeEmailer。我在server.js和emailRoute.js中都导入了body解析器。您是否尝试过调试并查看服务器中从客户端接收到的参数?