最新编辑
在您提到的注释中,它是中间件,使用(req,res,next)的函数签名是正确的。
但当我看到你在评论中的那句话时
router.post("/user/signup",UserController.signup);
这是一个正常的路由,签名应该是(req,res)。
那么你可以试试吗
const {sendEmail} = require("../lib/email");
exports.signup = async (req, res) => {
try {
//validate request and save user in DB
let content = {
activateLink: "link to activate email",
};
const result = await sendEmail(email, "Verification OTP", "otp", content);
res.status(201).json({
message: "User created successfully !",
userData: {
_id: result._id.toString(),
email: result.email,
},
});
}
catch (err) {
console.log(`Something went wrong sending activation mail`, err);
throw new Error(err);
}
};
import { rejects } from "assert";
exports.sendEmail = async (to, subject, viewName, content) => {
return new Promise((resolve, reject) => {
const transporter = nodemailer.createTransport(config.mailConfig);
const handlebarsOptions = {
viewEngine: {
extName: ".handlebars",
layoutsDir: viewPath,
defaultLayout: false,
partialsDir: partialsPath,
},
viewPath: viewPath,
extName: ".handlebars",
};
transporter.use("compile", hbs(handlebarsOptions));
const mailOptions = {
from: "noreply@admin.com", // Update from email
to: to,
subject: subject,
template: viewName,
context: content,
};
let info = transporter.sendMail(mailOptions, (err, result) => {
if (err) {
reject(err);
return;
}
console.log("Message sent: %s", result.messageId);
resolve(result);
});
});
};
您正在使用哪个版本的nodemailer?6.4.1之前的版本不会返回Promise,因此您需要使用回调。
通过回调,代码将如下所示:
const {sendEmail} = require("../lib/email");
exports.signup = async (req, res, next) => {
try {
//validate request and save user in DB
let content = {
activateLink: "link to activate email",
};
const result = await sendEmail(email, "Verification OTP", "otp", content, next);
res.status(201).json({
message: "User created successfully !",
userData: {
_id: result._id.toString(),
email: result.email,
},
});
}
catch (err) {
if (!err.statusCode) {
err.statusCode = 500;
}
next(err);
}
};
import { rejects } from "assert";
exports.sendEmail = async (to, subject, viewName, content) => {
return new Promise((resolve, reject) => {
const transporter = nodemailer.createTransport(config.mailConfig);
const handlebarsOptions = {
viewEngine: {
extName: ".handlebars",
layoutsDir: viewPath,
defaultLayout: false,
partialsDir: partialsPath,
},
viewPath: viewPath,
extName: ".handlebars",
};
transporter.use("compile", hbs(handlebarsOptions));
const mailOptions = {
from: "noreply@admin.com", // Update from email
to: to,
subject: subject,
template: viewName,
context: content,
};
let info = transporter.sendMail(mailOptions, (err, result) => {
if (err) {
reject(err);
return;
}
console.log("Message sent: %s", result.messageId);
resolve(result);
});
});
};
您需要从返回结果(信息)
let info = await transporter.sendMail(mailOptions);
到
signup
方法
_id: result._id.toString(), <-- result will be undefined here
email: result.email, <-- result will be undefined here