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

Javascript 在Next.js应用程序中找不到API路由(找不到该页面),javascript,reactjs,api,next.js,server-side-rendering,Javascript,Reactjs,Api,Next.js,Server Side Rendering,我正在使用Next.js应用程序,我已经创建了一个用于发送电子邮件的应用程序 一切都在我的开发环境中运行 但是,当我部署到生产环境时,我只收到一个404-页面无法找到作为此api路由响应的错误 我不是项目的创建者,我怀疑问题出在用于部署的npm命令中 我刚刚在“pages/api”中创建了一个文件,其中包括:server.post('*',(req,res)=>handle(req,res))。我还需要做什么吗 我正在使用Vercel进行部署 以下是我在package.json文件中的脚本: &

我正在使用Next.js应用程序,我已经创建了一个用于发送电子邮件的应用程序

一切都在我的开发环境中运行

但是,当我部署到生产环境时,我只收到一个
404
-
页面无法找到作为此api路由响应的
错误

我不是项目的创建者,我怀疑问题出在用于部署的npm命令中

我刚刚在“pages/api”中创建了一个文件,其中包括:
server.post('*',(req,res)=>handle(req,res))。我还需要做什么吗

我正在使用Vercel进行部署

以下是我在
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
命令

我在生产中的build命令是
npm立即运行build

这是
index.js
文件:

"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"
}
const{setConfig}=require('next/config')
setConfig(require('./next.config'))
需要(“./server”)
这是
server.js
文件:

"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"
}
const express=require('express');
const next=需要(“next”);
const nextI18NextMiddleware=require('next-i18next/middleware')。默认值;
const nextI18next=require('./i18n');
const port=process.env.port | | 3007;
const app=next({dev:process.env.NODE_env!=='production'});
const handle=app.getRequestHandler();
(异步()=>{
等待app.prepare();
const server=express();
server.post('*',(req,res)=>handle(req,res));
使用(nextI18NextMiddleware(nextI18next));
get('*',(req,res)=>handle(req,res));
等待服务器。侦听(端口);
console.log(`>已准备就绪http://localhost:${port}`);//eslint禁用行号控制台
})();
这是我在
页面/api/send email.js中的api路由文件:

从“../../utils/sendmail”导入Sendmail;
导出默认异步(req,res)=>{
如果(请求方法=='POST'){
const{to,subject,html}=req.body;
const response=wait sendmail({to,subject,html});
if(response.success){
返回res.status(200.end();
}
返回res.status(500.json)(响应);
}
返回res.status(400.end();
};
以下是我调用api路由的方式:

fetch('/api/send email'{
方法:“POST”,
标题:{'Content-Type':'application/json'},
正文:JSON.stringify({
收件人:formEmailTo,
主题:formEmailSubject,
html:FormEmailContent
})
})
。然后((响应)=>{
如果(!response.ok){
抛出错误(response.statusText);
}
返回响应;
})
.然后(()=>handleOpenSnackbarMsg())
.catch(()=>handleOpenSnackbarErrMsg());
这是我的
next.config.js
文件:

"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"
}
constwithcss=require(“@zeit/next css”)
const withImages=require('next-images');
module.exports=withImages(
用CSS({
是的,
exportPathMap:函数(){
返回{
“/”:{page:“/”},
'/blank page':{page:'/blank page'},
};
},
publicRuntimeConfig:{
localesubpath:typeof process.env.LOCALE_子路径==='string'
?process.env.LOCALE_子路径
:“无”,
},
网页包:(配置,选项)=>{
cssModules:是的,
//config.module.rules.push({
//强制执行:“预”,
//测试:/\.js?$/,,
//排除:[/node_modules/],
//加载程序:“eslint加载程序”,
//选项:{
//安静:是的,
//          }
//      });
config.node={
财政司司长:空置
}
返回配置;
},
})
);

谢谢大家!

如果项目包含API路由,则无法使用下一个导出。从
的“立即生成”中删除
下一次导出
:“下一次生成和下一次导出-o dist”


参考资料:

Vercel不支持自定义服务器!您必须将其托管在vps上