cPanel部署json-server后路由失效问题求助
问题解决:cPanel部署json-server重写规则失效及单ID路由404
问题分析
你的json-server部署在/json-server/子目录下,但当前重写规则仅匹配/api/*路径,未包含子目录前缀,导致路由重写逻辑不生效;单ID请求因重写失败,无法被json-server的路由模块识别,最终返回404。
解决方案
修正重写规则,加入子目录前缀
由于应用部署在https://soltonbaev.com/json-server/路径下,所有请求都会携带这个前缀,因此重写规则需要匹配完整路径:server.use( jsonServer.rewriter({ '/json-server/api/*': '/$1' }) );此规则会将
/json-server/api/contacts/1重写为/contacts/1,刚好匹配json-server的默认路由格式。调整中间件执行顺序
必须保证jsonServer.rewriter在middlewares和router之前执行,确保请求先完成重写再进入后续处理流程;CORS配置可放在重写之后,避免跨域拦截影响路由处理。验证数据源结构
确认database.json中contacts数组包含带id字段的对象,示例结构如下:{ "contacts": [ { "id": 1, "name": "示例联系人1" }, { "id": 2, "name": "示例联系人2" } ] }
修改后的完整server.js代码
require('dotenv').config(); const jsonServer = require('json-server'); const cors = require('cors'); const server = jsonServer.create(); const router = jsonServer.router('database.json'); const middlewares = jsonServer.defaults(); const port = process.env.PORT || 3000; // 优先处理路由重写,包含子目录前缀 server.use( jsonServer.rewriter({ '/json-server/api/*': '/$1' }) ); // 配置跨域规则 server.use(cors({origin: process.env.REMOTE_CLIENT_APP, credentials: true})); // 加载json-server默认中间件(静态资源、日志等) server.use(middlewares); // 挂载json-server核心路由 server.use(router); server.listen(port, () => { console.log(`🚀 JSON Server is running on port ${port}`); });
额外检查项
若调整后仍有问题,确认cPanel的Node.js应用配置:
- Application Root需设置为
json-server目录 - Application URL需设置为
https://soltonbaev.com/json-server/ - 重启Node.js应用使配置生效
内容的提问来源于stack exchange,提问作者Ibraim Soltonbaev
相关产品推荐
相关产品推荐

