【React】React+Express部署Nginx所遇前端路由等问题

场景

  • 博主将做好的react项目build,生成buid文件夹,然后拿去塞Nginx上运行。
  • 后端使用Express。
  • 博主一开始在React里开发时候使用的是webpack自带的devsever,里面有配置Proxy进行转发来达到同源非跨域请求。
  proxy:{
      "/api":{
        target:"http://localhost:3000",
        pathRewrite:{"^/api":""}
    }
  • 博主当时试验的时候反正不加pathRewrite好像不行,这就是如果在react里面去请求/api这个路径会自动转发给localhost:3000端口。
  • 等写完代码build配置Nginx发现有很多坑。

Nginx配置

  • Nginx 玩的就是它配置文件,这个配置文件看起来很简单,但一开始怎么搞都不对,静态文件对了,请求的Express转发不对。
  • 博主先用正向代理试验了把,发现直接报同源请求问题,然后服务端开启请求,发现后端路径就是不对。
  • 后来大概搞清楚怎么配置后,监听同一端口下,配置location,发现还是后端路径不对。
  • 最后发现原来在devserver请求/api/xxxx 直接跳到后端的/xxxx路由,而在nginx上会跳到api/xxxx上。
  • 博主后来把后端全改了,然后发现貌似可能可以用Nginx的rewrite把这个api消掉,但不太清楚咋搞就没研究了。
    -然后还有最后一个坑。服务端路径对了后,前端进入动态路由或者一些刷新后,直接404,这跟devserver差别太大。最后通过百度找到原因:它这个优先匹配后端路由,得让他去404跳回主页交给前端操作就能达到devserver的效果。这也是一开始估计所有人学前端路由最大的疑问?后端到底怎么配的,是不是每个前端路由都要配个后端接口?如果不配后端,那么肯定就404。
  • 另外最好配置一次换个端口号,不然以为Nginx重启了实际上没重启,还以为配置不对浪费时间。

    server {
        listen       55121;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   C:/dist/build;
            index  index.html index.htm;
            try_files $uri $uri/ /index.html =404;#####这句必须加,前端路由关键
        }
        location /api {
            proxy_pass   http://127.0.0.1:3000; ###访问/api就把服务交给3000端口。
        }
    }

后续研究发现

  • devserver配置的时候没必要rewrite路径,不然最后跟部署的路径不一样,配nginx反而更费劲了,使用
  proxy: [{
      context: ['/articledetail/api', '/api'],
      target: 'http://localhost:3002',
  }]

方法在context里配置多个请求路径代理到所需要的服务器端口上,最后就可以跟部署上路径保持一致。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

业火之理

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值