Next.js中Nodemailer发送邮件返回响应时报错的解决求助
解决Next.js邮件发送接口返回响应时的headers未定义错误
问题场景
Next.js项目中,仅执行邮件发送逻辑时功能正常,但尝试通过NextResponse.json返回发送结果时,触发以下错误:
error TypeError: Cannot read properties of undefined (reading 'headers') at eval (webpack-internal:///(rsc)/./node_modules/next/dist/server/future/route-modules/app-route/module.js:266:61) at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
原正常运行的邮件发送代码:
await transporter .sendMail(options) .then((info) => { console.log("Email sent:", info.response); }) .catch((error) => { console.log("Email not sent:", error); });
期望实现的带响应返回的代码:
await transporter .sendMail(options) .then((info) => { console.log("Email sent:", info.response); return NextResponse.json({ status: "sent" }); }) .catch((error) => { console.log("Email not sent:", error); return NextResponse.json({ status: "error" }); });
问题原因
混合使用await与.then/.catch的异步写法,导致NextResponse对象没有被正确作为路由处理函数的最终返回值传递给Next.js,进而引发框架读取headers属性时的未定义错误。
解决方案
改用纯try/catch配合await的写法,让路由函数直接返回响应对象:
try { const info = await transporter.sendMail(options); console.log("Email sent:", info.response); return NextResponse.json({ status: "sent" }); } catch (error) { console.log("Email not sent:", error); return NextResponse.json({ status: "error" }, { status: 500 }); }
说明
- 移除Promise链式调用,用
try/catch捕获异步错误,确保NextResponse直接作为路由函数的返回值,让Next.js能正确解析响应头。 - 错误场景下建议附加
status: 500状态码,遵循HTTP规范,方便前端精准判断请求状态。
内容的提问来源于stack exchange,提问作者pablofdezr
相关产品推荐
相关产品推荐

