Node.js AWS Lambda(v16)根据异步邮件发送结果返回HTTP响应方案
AWS Lambda(Node.js v16) 异步邮件发送响应处理方案
1. 封装Promise版本的sendEmail函数
将nodemailer的回调式sendMail包装为Promise,适配async/await语法:
const nodemailer = require('nodemailer'); function sendEmail(fromAddr, toAddr, code) { return new Promise((resolve, reject) => { // 配置邮件传输器(替换为你的实际配置) const transporter = nodemailer.createTransport({ service: 'your-email-service', auth: { user: 'your-account', pass: 'your-auth-token' } }); const mailOptions = { from: fromAddr, to: toAddr, subject: '验证邮件', text: `你的验证码:${code}` }; // 用Promise处理回调结果 transporter.sendMail(mailOptions, (error, info) => { if (error) { reject(error); // 发送失败,传递错误信息 } else { resolve(true); // 发送成功,返回标识 } }); }); }
2. Lambda Handler的异步逻辑处理
在Lambda入口函数中,通过try/catch捕获邮件发送的成功/失败状态,返回对应HTTP响应:
exports.handler = async (event) => { try { // 可从event中提取实际业务参数,这里用示例值 const from = "sender@example.com"; const to = "recipient@example.com"; const code = "123456"; // 等待邮件发送完成 await sendEmail(from, to, code); // 发送成功,返回200响应 return { statusCode: 200, body: JSON.stringify({ success: true, message: "邮件发送成功" }) }; } catch (error) { // 发送失败,返回错误响应(可根据业务调整statusCode) return { statusCode: 500, body: JSON.stringify({ success: false, message: "邮件发送失败", error: error.message }) }; } };
核心要点
- 回调转Promise是实现async/await的关键,确保sendEmail能被await等待
- Lambda handler必须声明为
async,才能使用await语法 - try/catch块捕获所有发送过程中的异常,避免Lambda因未处理异常崩溃,同时返回明确的错误响应
- 可根据实际场景调整响应状态码,比如参数校验失败返回400,服务端异常返回500
内容的提问来源于stack exchange,提问作者skatori
相关产品推荐
相关产品推荐

