Javascript Express get方法不调用第一个函数

Javascript Express get方法不调用第一个函数,javascript,node.js,express,nodemailer,Javascript,Node.js,Express,Nodemailer,所以我写了一些代码,当有人访问我的网站时给我发电子邮件。这是我的密码 app.get(“/”,函数(req,res,next){ var mailpoptions={ 摘自:“因明显原因删除”, 至:“因明显原因被删除”, 主题:“用户访问”, 文本:“用户已访问您的站点” }; transporter.sendMail(邮件选项,函数(错误,信息){ 如果(错误){ console.log(错误); }否则{ console.log('发送的电子邮件:'+信息响应); } }); consol

所以我写了一些代码,当有人访问我的网站时给我发电子邮件。这是我的密码

app.get(“/”,函数(req,res,next){
var mailpoptions={
摘自:“因明显原因删除”,
至:“因明显原因被删除”,
主题:“用户访问”,
文本:“用户已访问您的站点”
};
transporter.sendMail(邮件选项,函数(错误,信息){
如果(错误){
console.log(错误);
}否则{
console.log('发送的电子邮件:'+信息响应);
}
});
console.log(“用户访问”);
next();
},功能(req,res){
res.sendFile(path.join(_dirname,“client files”,“index.html”);
});

但是当我访问我的网站时,我什么也得不到。我没有收到电子邮件,也没有打印出来,我只收到网页。有人知道如何解决这个问题吗?

看起来问题是异步代码。简而言之:代码的顺序不是它执行的顺序

发送那封邮件需要时间。NodeJS是单线程的,它发送电子邮件,然后继续执行代码

因此,它会立即发送电子邮件并调用下一个函数,并将用户发送到下一个处理程序,而对电子邮件一无所知

我找不到一个真正好的理由让两个不同的处理者

第1版:不要等待电子邮件,立即发送页面


app.get(“/”,函数(req,res,next){
var mailpoptions={
摘自:“因明显原因删除”,
至:“因明显原因被删除”,
主题:“用户访问”,
文本:“用户已访问您的站点”
};
transporter.sendMail(邮件选项,函数(错误,信息){
如果(错误){
console.log(错误);
}否则{
console.log('发送的电子邮件:'+信息响应);
}
});
console.log(“用户访问”);
res.sendFile(path.join(_dirname,“client files”,“index.html”);
});
结果:会的

  • 注销“用户已访问”
  • 发送文件页面
  • 发送电子邮件
  • 注销“已发送电子邮件”
  • 第2版:等待电子邮件

    
    app.get(“/”,函数(req,res,next){
    var mailpoptions={
    摘自:“因明显原因删除”,
    至:“因明显原因被删除”,
    主题:“用户访问”,
    文本:“用户已访问您的站点”
    };
    transporter.sendMail(邮件选项,函数(错误,信息){
    如果(错误){
    console.log(错误);
    }否则{
    console.log('发送的电子邮件:'+信息响应);
    console.log(“用户访问”);
    res.sendFile(path.join(_dirname,“client files”,“index.html”);
    }
    });
    });
    
    结果:会的

  • 发送电子邮件
  • 注销“已发送电子邮件”
  • 注销“用户已访问”
  • 发送文件

  • 您是否获得了
    “用户访问”
    ?或者什么都没有?@ChrisG字面上什么都没有移动
    next()
    到您传递给
    sendMail()的回调中。该函数是异步的,因此代码将立即转移到第二个处理程序。@ChrisG仍然没有任何内容
    wait transporter.sendMail(mailpoptions,function(error,info){
    我尝试了这个,但是除了res.sendFile之外,没有任何代码在运行。我甚至尝试删除电子邮件内容,只是有一个日志语句和sendFile,它没有打印任何内容,但仍然发送到了网站。