首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >next.js 404无法加载vercel上的资源/api/

问next.js 404无法加载vercel上的资源/api/
EN

Stack Overflow用户
提问于 2021-07-12 02:05:08
回答 1查看 303关注 0票数 0

我正在构建一个部署在vercel上的next js网站。

我做了一个通过nodemailer发送邮件的next.js api /api/contact。当我在我的pc上尝试代码时,它工作得很好,但是当我上传到vercel (与github集成)时,我在控制台中得到一个/api/contact的"404 failed to load resource“,它不能工作。

要让next.js应用程序接口在vercel上工作,还需要做更多的配置吗?

下面是api调用的代码:

代码语言:javascript
复制
fetch("/api/contact", {
    method: "POST",
    headers: {
      Accept: "application/json, text/plain, */*",
      "Content-Type": "application/json",
    },
    body: JSON.stringify(data),
    }).then((res) => {

contact.js in api folder

EN

回答 1

Stack Overflow用户

发布于 2021-07-17 17:41:42

所以这里是有效的答案:“加载资源失败”在几次部署后消失了,但我仍然有一个404。问题是transporter.sendMail需要是异步的,我在gmail上遇到了问题,我最终使用了另一个邮件提供商(zoho)。因此,对于任何面临同样问题的人来说,这里有一个有效的代码(可能不是最好的,但它是有效的):

​

代码语言:javascript
复制
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();
  };
}

​

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68338829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档