首页 > 解决方案 > req.body.name 未定义 - Nodemailer ejs

问题描述

我看到了一些与我很接近但不完全相同的问题,所以我的问题是我有一个带有 Form 属性的 ejs 模板,我想将输入发送到邮件,所以我用 name="xyz" 声明所有输入并在里面路线.get req.body.conSurname, conName: req.body.conName,:. 所以我的帖子路线看起来像这样。

router.post('/contact/send', (req, res) => {
    // Nodemailer
    let transporter = nodemailer.createTransport({
        service: 'gmail',
        auth: {
            user: 'abc@gmail.com',
            pass: '******'
        }
    });
    const mailOptions = {
        from: 'abc@gmail.com', 
        to: 'def@gmx.de', 
        subject: 'New Mail', 
        html: '<h2>Mail from: '+ req.body.conSurname + ' ' + conName + '</h2>'
    };
    transporter.sendMail(mailOptions, function (err, info) {
        if (err)
            console.log(err)
        else
            console.log(info);
    });
    res.redirect('/contact');
})

如果我发送公式,它会抛出 ReferenceError: conSurname is not defined 但如果我记录一个属性,它会向我显示来自输入的正确值。错误在哪里?

标签: javascriptnode.jsejsnodemailer

解决方案


那是因为你必须像这样导入 json 中间件:

var express = require('express');
var app = express();
app.use(express.json());

然后,您的 express 服务器将在接收带有标头的请求时反序列化 JSON 正文Content-Type: application/json,并且您的代码将正常工作。


推荐阅读