You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

cPanel部署json-server后路由失效问题求助

问题解决:cPanel部署json-server重写规则失效及单ID路由404

问题分析

你的json-server部署在/json-server/子目录下,但当前重写规则仅匹配/api/*路径,未包含子目录前缀,导致路由重写逻辑不生效;单ID请求因重写失败,无法被json-server的路由模块识别,最终返回404。

解决方案

  1. 修正重写规则,加入子目录前缀
    由于应用部署在https://soltonbaev.com/json-server/路径下,所有请求都会携带这个前缀,因此重写规则需要匹配完整路径:

    server.use(
      jsonServer.rewriter({
        '/json-server/api/*': '/$1'
      })
    );
    

    此规则会将/json-server/api/contacts/1重写为/contacts/1,刚好匹配json-server的默认路由格式。

  2. 调整中间件执行顺序
    必须保证jsonServer.rewriter在middlewares和router之前执行,确保请求先完成重写再进入后续处理流程;CORS配置可放在重写之后,避免跨域拦截影响路由处理。

  3. 验证数据源结构
    确认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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 04:10:16