api - next.js 404 无法在 vercel 上加载资源 /api/
问题描述
我正在构建一个部署在 vercel 上的下一个 js 网站。
我制作了一个 next.js api /api/contact,它通过 nodemailer 发送邮件。当我在我的电脑上尝试代码时它工作正常,但是当我在 vercel 上上传(与 github 集成)时,我在控制台中收到 /api/contact 的“404 加载资源失败”,但它不起作用。
是否需要为 next.js api 进行更多配置才能在 vercel 上工作?
这是 api 调用的代码:
fetch("/api/contact", {
method: "POST",
headers: {
Accept: "application/json, text/plain, */*",
"Content-Type": "application/json",
},
body: JSON.stringify(data),
}).then((res) => {
解决方案
所以这里是有效的答案:“加载资源失败”在几次部署后消失了,但我仍然有一个 404。问题是 transporter.sendMail 需要异步 + 我遇到了 gmail 问题,我结束了使用另一个邮件提供商(zoho )。所以对于任何面临同样问题的人来说,这里有一个工作代码(也许不是最好的,但它正在工作):
export default async (req, res) => {
require('dotenv').config()
const nodemailer = require('nodemailer');
async function mail() {
console.log('enter async function');
const transporter = nodemailer.createTransport({
name: "smtp.zoho.com",
port: 465,
host: "smtp.zoho.com",
auth: {
user: process.env.mailsender,
pass: process.env.mailpw,
},
secure: true,
})
let mail = await transporter.sendMail({
from: process.env.mailsender,
to: process.env.mailreceive,
subject: `${req.body.message}`,
text: `${req.body.message}`,
html: `<div><p>${req.body.message}</p></div>`
});
}
try {
console.log('sending mail');
await mail();
res.status(200);
console.log('mail should be sent');
} catch (error) {
console.log(error);
console.log('error sending mail');
res.status(404);
} finally {
res.end();
};
}
推荐阅读
- netflix-zuul - 我可以根据主机在zuul中配置静态路由吗?
- oracle - oracle 使用 where 子句向用户授予选择权限
- android - Android 房间数据库一对一关系
- python - 使用方法作为类方法而不声明为类方法
- excel - 尝试从放置在 excel 表中的列中的 url 下载图像时,MacOS 上的文件未找到错误
- r - Epanechnikov 核在计算上真的比高斯核更有效吗?
- leaflet - 具有 6 个或更多纬度点的传单多边形
- amazon-s3 - 授予 Lambda 对私有 S3 存储桶的访问权限
- python - python服务返回错误OSError:屏幕抓取失败
- ios - 基本 == 重载失败