gpt4 book ai didi

javascript - 在 Next.js 应用程序中找不到 API 路由(找不到该页面)

转载 作者:行者123 更新时间:2023-12-03 17:24:24 25 4
gpt4 key购买 nike

我正在使用 Next.js 应用程序,并且创建了 api route发送电子邮件。
一切都在我的开发环境中工作。
但是,当我部署到生产环境时,我只收到一个 404 - The page could not be found错误作为此 api 路由的响应。
我不是该项目的创建者,我怀疑问题出在用于部署的 npm 命令中。
我刚刚在 'pages/api' 中创建了一个文件并包含以下内容:server.post('*', (req, res) => handle(req, res));在 server.js 文件上。我还需要做其他事情吗?

I am using Vercel to deploy.


这些是我在 package.json 中的脚本文件:
"scripts": {
"dev": "node index.js",
"build": "NODE_ENV=production next build",
"start": "node index.js",
"export": "next export",
"now-build": "next build && next export -o dist"
}
在本地环境中,我使用 npm start命令。
我在生产中的构建命令是 npm run now-build enter image description here
这是 index.js文件:
const { setConfig } = require('next/config')
setConfig(require('./next.config'))

require('./server')
这是 server.js文件:
const express = require('express');
const next = require('next');
const nextI18NextMiddleware = require('next-i18next/middleware').default;

const nextI18next = require('./i18n');

const port = process.env.PORT || 3007;
const app = next({ dev: process.env.NODE_ENV !== 'production' });
const handle = app.getRequestHandler();

(async () => {
await app.prepare();
const server = express();

server.post('*', (req, res) => handle(req, res));

server.use(nextI18NextMiddleware(nextI18next));

server.get('*', (req, res) => handle(req, res));

await server.listen(port);
console.log(`> Ready on http://localhost:${port}`); // eslint-disable-line no-console
})();
这是我在 pages/api/send-email.js 中的 api 路由文件:
import sendEmail from '../../utils/sendEmail';

export default async (req, res) => {
if (req.method === 'POST') {
const { to, subject, html } = req.body;
const response = await sendEmail({ to, subject, html });
if (response.success) {
return res.status(200).end();
}
return res.status(500).json(response);
}
return res.status(400).end();
};
这就是我调用 api 路由的方式:
    fetch('/api/send-email', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
to: formEmailTo,
subject: formEmailSubject,
html: FormEmailContent
})
})
.then((response) => {
if (!response.ok) {
throw Error(response.statusText);
}
return response;
})
.then(() => handleOpenSnackbarMsg())
.catch(() => handleOpenSnackbarErrMsg());
这是我的 next.config.js文件:
const withCSS = require('@zeit/next-css')
const withImages = require('next-images');

module.exports = withImages(
withCSS({
exportTrailingSlash: true,
exportPathMap: function() {
return {
'/': { page: '/' },
'/blank-page': { page: '/blank-page' },
};
},
publicRuntimeConfig: {
localeSubpaths: typeof process.env.LOCALE_SUBPATHS === 'string'
? process.env.LOCALE_SUBPATHS
: 'none',
},
webpack: (config, options) => {
cssModules: true,
// config.module.rules.push({
// enforce: 'pre',
// test: /\.js?$/,
// exclude: [/node_modules/],
// loader: 'eslint-loader',
// options: {
// quiet: true,
// }
// });
config.node = {
fs: 'empty'
}
return config;
},
})
);
谢谢!

最佳答案

如果您的项目包含 API 路由,则不能使用下一个导出。删除 next export来自 "now-build": "next build && next export -o dist" .
引用:https://nextjs.org/docs/api-routes/introduction#caveats

关于javascript - 在 Next.js 应用程序中找不到 API 路由(找不到该页面),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62664255/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com