node.js - 使用 Nodemailer 时如何修复 "await is only valid in async function"错误

标签 node.js angular nodemailer

我正在尝试按照教程使用 Nodemailer 创建“联系我们”表单。本教程粘贴了 Nodemailer 网站上的一些代码,但自该教程录制以来源代码已更新。

我从网站粘贴了最新的代码,但收到以下控制台错误:

let info = await transporter.sendMail(mailOptions)

SyntaxError: await is only valid in async function

下面是我的 app.js 代码:

const express = require("express");
const bodyParser = require("body-parser");
const exphbs = require("express-handlebars");
const path = require("path");
const nodemailer = require("nodemailer");

const app = express();

// View engine setup
app.engine("handlebars", exphbs());
app.set("view engine", "handlebars");

// Static folder
app.use("/public", express.static(path.join(__dirname, "public")));

// Body Parser Middleware
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

app.get("/", (req, res) => {
  res.render("contact");
});

app.post("/send", (req, res) => {
  const output = `
    <p>You have a new contact request</p>
    <h3>Contact Details</h3>
    <ul>
        <li>Name: ${req.body.name}</li>
        <li>Company: ${req.body.company}</li>
        <li>Email: ${req.body.email}</li>
        <li>Phone: ${req.body.phone}</li>
    </ul>
    <h3>Message</h3>
    <p>${req.body.message}</p>    
    `;
    
    var transporter = nodemailer.createTransport({
        service: 'gmail',
        auth: {
               user: 'youremail@address.com',
               pass: 'yourpassword'
           }
       });

       const mailOptions = {
        from: 'sender@email.com', // sender address
        to: 'to@email.com', // list of receivers
        subject: 'Subject of your email', // Subject line
        html: '<p>Your html here</p>'// plain text body
      };

      let info = await transporter.sendMail(mailOptions)

  console.log("Message sent: %s", info.messageId);
  console.log("Preview URL: %s", nodemailer.getTestMessageUrl(info));
  
});

app.listen(3000, () => console.log("Server started..."));

我粘贴的代码位于此页面:https://nodemailer.com/about/

为什么我会收到此错误,我需要进行哪些更改才能使代码按预期工作?

最佳答案

这是因为 await 仅在 async 函数内部有效。语法是

async function some() {
  await other
}

更改此行:

app.post("/send", (req, res) => {

请注意此处的async关键字 app.post("/send", async (req, res) => {

了解更多关于async/await的信息

关于node.js - 使用 Nodemailer 时如何修复 "await is only valid in async function"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55396788/

相关文章:

javascript - 将结果从一个函数传递到 Nodejs 上的另一个函数

node.js - 如何检查node_modules目录中是否有不必要的包?

node.js - npm 错误! enoent ENOENT : no such file or directory, 打开 '/app/package.json'

node.js - 使用TypeScript的Express路由的返回类型

javascript - 服务中的 Angular 2 变更检测

html - Angular 4 Output Complete HTML Syntax code in HTML as raw text

node.js - Nodemailer - 无法发送可点击的链接

angular - HTML5 Websql - 如何与 Ionic 3 和 Angular 4 一起使用

node.js - 错误 : SELF_SIGNED_CERT_IN_CHAIN using localhost

javascript - TypeError : nodemailer. createTransport 不是一个函数