当前位置: 首页 > news >正文

express静态路由匹配引发的404错误

最近有一个react项目,我用webpack打包,然后使用express作为webserver跑起来。

但是在运行的时候,就白屏了,看console原来是报了404错误

 可是代码里面明明有路由定义,为什么还是报404错误呢?

app.get("/api", (req, res) => {

  let url = "http://82.157.43.234:8080";

  axios

    .get(url, { params: req.query })

    .then((response) => {

      res.json(response.data);

    })

    .catch((e) => {

      console.log(e);

    });

});

 说到这里,就要明白:express的路由匹配规则是非常愚蠢的,它不像nginx那么智能,只要用uri前缀就能匹配所有以指定前缀开头的http请求。

 express的路由规则是要跟预定义的路由完全相同,差一个字都不行!

什么意思? 就是express只能匹配跟它预定义规则在字面上完全相同的路由,举个例子,如果是

app.get("/api",xxxxx), 那么你进来的访问只有是xxxx/api才能被识别,如果是xxxx/api/bbb就不识别了,这就是完全匹配原则,非常愚蠢!

所以/api/productCollections是没法被识别的

你要么就只能单独去定义一个/api/productCollections路由。

或者采用动态路由"/api/:path/*",通过req.params.path加路径拼接创建完整的访问地址:

app.get("/api/:path/*", (req, res) => {

  let url = "http://82.157.43.234:8080/api/";

  var path = req.params.path;

  url = url + path;

  console.log("url is ",url)

  axios

    .get(url, { params: req.query })

    .then((response) => {

      res.json(response.data);

    })

    .catch((e) => {

      console.log(e);

    });

});

或者通过代理中间件http-proxy转发请求:

const httpProxy = require("http-proxy");

const proxy = httpProxy.createProxyServer({});

 app.use("/api", (req, res) => {

  // 设置目标服务器的URL

 const target = "http://82.157.43.234:8080/api"; // 替换成实际的目标服务器URL

 proxy.web(req, res, { target });

  });

http://www.lryc.cn/news/168743.html

相关文章:

  • VHOST-SCSI代码分析(4)VHOST KICK机制
  • Docker Volume(存储卷)
  • 【毕设选题】opencv 图像识别 指纹识别 - python
  • 阿里云无影云电脑使用初体验:真的好用吗?
  • 无涯教程-JavaScript - FLOOR.MATH函数
  • Dubbo3基础使用
  • Android 图片加载框架Glide源码详解
  • 知识竞赛活动舞台搭建需要多少钱
  • 07set注入级联属性和特殊字符及表达式语言
  • 用AI在小红书做早教启蒙,2个月涨粉11.7万,获赞10万的新流量玩法
  • Recommender Systems in the Era of Large Language Models (LLMs)
  • 红心向阳 百鸟朝凤
  • C语言自己实现一个memcpy函数
  • C#教师考勤管理系统asp.net+sqlserver
  • Nginx代理配置详解
  • DAG 的深度优先搜索标记
  • 网络存储解决方案:选择与配置
  • java中BigDecimal除法运算指定小数点保留位数和取舍规则
  • 车联网远程监控管理提升车辆调度效率,实现高效运营
  • 数据治理-数据建模和设计
  • 博客系统(升级(Spring))(四)(完)基本功能(阅读,修改,添加,删除文章)(附带项目)
  • 常用的辅助类(必会)
  • Java常用类之 String、StringBuffer、StringBuilder
  • linux在所有文件中查找某一个字符串
  • WebSocket vs SSE: 实时数据推送到前端的选择与实现(详细)
  • Redis从入门到精通(二:数据类型)
  • 基于SSM的珠宝首饰交易平台
  • 4款视频号数据分析平台!
  • 【系统架构】什么是集群?为什么要使用集群架构?
  • Java手写拓扑排序和拓扑排序应用拓展案例