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

Node.js Express路由配置错误导致Cannot POST/GET 404问题

问题根因

所有静态资源必须加通配符才能访问、接口404、JSON解析报错的核心原因都是Express路由挂载路径与实际请求路径不匹配,不存在其他复杂依赖问题。

各异常现象对应的具体问题

  1. 静态资源必须写*/images这类通配符才能生效
    你的应用部署在二级路径/strapiClient下,不是域名根路径/。如果直接写app.use('/images', express.static(...)),Express只会匹配路径开头为/images的请求,不会匹配带/strapiClient前缀的静态资源请求,之前用通配符属于歪打正着覆盖了所有层级的路径,但这种写法会打乱路由匹配优先级,留下隐患。
  2. POST请求404、GET测试路由返回Cannot GET /strapiClient/falauser
    Express路由匹配遵循拼接规则:app.use的挂载路径 + 路由内部定义的路径 = 最终生效的请求路径。
    你当前的配置是用*/falauser挂载路由模块,但falaUser.js内部又定义了/strapiClient的路由,最终实际匹配的路径是*/falauser/strapiClient,和你实际请求的/strapiClient/falauser路径顺序、层级完全不匹配,自然返回404。
  3. SyntaxError: Unexpected token < in JSON at position 0报错
    接口返回404时,Express默认返回HTML格式的错误页(内容开头为<!DOCTYPE html>,第一个字符就是<),但前端代码按JSON格式解析响应内容,直接抛出解析错误,和axios请求逻辑、后端JSON序列化逻辑无关。
修复方案

按以下步骤修改配置即可,不需要保留通配符写法:

  1. 统一配置应用根路径前缀,替换所有通配符写法
    修改server.js中的静态资源、路由挂载代码:
    // 定义统一的应用根前缀,和页面访问的二级路径保持一致
    const APP_ROOT = '/strapiClient';
    
    // 静态资源配置,修正path.join的错误用法,去掉通配符
    app.use(`${APP_ROOT}/images`, express.static(path.join(__dirname, 'public/images')));
    app.use(`${APP_ROOT}/js`, express.static(path.join(__dirname, 'public/js')));
    app.use(`${APP_ROOT}/css`, express.static(path.join(__dirname, 'public/css')));
    app.use(`${APP_ROOT}/slick-1.8.1`, express.static(path.join(__dirname, 'public/slick-1.8.1')));
    
    // 路由挂载,修正路径顺序
    app.use(`${APP_ROOT}/falauser`, falaUser);
    
  2. 修改falaUser.js的路由定义,去掉重复的路径前缀
    路由挂载时已经拼接了/strapiClient前缀,内部路由只需要写业务子路径即可:
    // 最终匹配的POST路径为 /strapiClient/falauser
    router.post('/', function (req, res, next) {
      console.log(req.body);
      axios
        .post(config.get("botUrl"), req.body)
        .then((dataBot) => {
          console.log(dataBot.data.responses);
          res.json({
            "responses": dataBot.data.responses
          });
        })
        .catch((error) => {
          console.error(error);
          res.status(500).json(error);
        })
    });
    
    // 测试GET路由,最终访问路径为 /strapiClient/falauser
    router.get('/', function (req, res) {
      res.json({
        fruta: 'lichia'
      });
    });
    
  3. 检查前端请求代码,确保POST请求地址写为/strapiClient/falauser,不要写错路径层级。
验证步骤

改完配置后按顺序校验:

  • 访问任意静态资源路径,比如/strapiClient/css/[项目内实际存在的css文件名],确认不需要通配符也能正常加载
  • 访问测试GET地址/strapiClient/falauser,确认能正常返回{"fruta":"lichia"}的JSON响应
  • 在聊天框触发POST请求,确认不再返回404,JSON解析错误同步消失

内容的提问来源于stack exchange,提问作者LuizC

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 19:01:08