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”);
});
结果:会的
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,它没有打印任何内容,但仍然发送到了网站。