非常简单的Node.js POST表单查询

时间:2017-10-23 00:27:47

标签: node.js express nodemailer

我有一个简单的node.js应用程序,使用快速静态和nodemailer,POST表单将填充的字段通过电子邮件发送给我自己。我的问题非常简单,我对Node来说很新,所以我找不到办法。

我的第一个问题是我无法找到将所有表单数据放入电子邮件文本的方法。下面,我试图将表单数据存储在JSON中并在电子邮件文本中调用它,但它不起作用。当我只使用一个变量(例如req.body.name)作为文本时,它只对我有用。如何在电子邮件中将数据格式化?

我的第二个问题是,我可以在发送电子邮件后找到处理应用程序的方法。我希望它重定向到成功页面,如标记行所示,但它不起作用。相反,页面转到/ reqform并显示一条错误消息,指出success.html不存在(它与我的html文件位于同一个公共文件夹中)。我相信问题在于我的sendFile用法,但我不确定。

app.post('/reqform', urlencodedParser, function (req, res) {
    response = {
        name: req.body.name,
        email: req.body.email,
        phone: req.body.phone
    };
    var mailContent = {
        from: 'myemail@gmail.com',
        to: 'myemail@gmail.com',
        subject: 'Service Request From req.body.name',
        text: response               //*** Problem #1
    };
    transporter.sendMail(mailClient, function (error, info) {
        if (error) {
            console.log(error);
        } else {
            res.sendFile("success.html");   //** Problem #2
        }
    });
})

非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

  1. JavaScript对象is just "[object Object]"的默认字符串值。如果你还需要其他任何东西,你必须具体说明你想要它的表现方式。

    例如,JSON是一种文本/字符串格式,表示像Objects这样的值。它与Object本身是分开的,因此您需要转换为使用它:

    var mailContent = {
        // ...
        text: JSON.stringify(response)
    }
    

    或者,提供您自己的格式:

    var mailContent = {
        // ...
        text: `Name: ${response.name}\nEmail: ${response.email}\nPhone: ${response.phone}`
    }
    
  2. 在这种情况下使用res.redirect()可能更好,允许客户端/浏览器通过您的应用程序的success.html中间件请求static()

    res.redirect('/success.html');
    

    res.sendFile()未与任何static()中间件协作以了解您的public文件夹。它希望您直接或使用root选项提供完整路径:

    res.sendFile(path.join(__dirname, 'public/success.html'));