【问题标题】:Very simple Node.js POST form inquiries非常简单的 Node.js POST 表单查询
【发布时间】:2018-04-03 11:26:19
【问题描述】:

我有一个简单的 node.js 应用程序,它使用 express static 和 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
        }
    });
})

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

【问题讨论】:

  • test 可能需要一个字符串,而您正在向它发送一个对象。那格式不好。电子邮件很麻烦,因为确保它们被格式化通常意味着丑陋的代码。至于另一个,你是如何公开你的公共目录的?
  • 您是否安装了body parser?这可能比手动干扰urlencodedParser 更容易。
  • 有没有办法发送一个包含所有三个变量的字符串?我的公共目录包含我的 html 文件都在同一级别。我将尝试身体解析器,只是现在我只是使用最低限度来使其工作。

标签: node.js express nodemailer


【解决方案1】:
  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() 可能会更好,允许客户端/浏览器通过应用程序的static() 中间件请求success.html

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

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

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

【讨论】:

  • 谢谢!这正是我所需要的。
猜你喜欢
  • 2015-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多