history路由解决刷新出现404的问题

本文具体重点介绍怎么解决浏览器路由(history模式)解决404的问题。

在项目打包上线时,如果采用的是哈希模式,不会出现404,原因是 url 中 # 号后面的内容不会发给后端当作资源路径请求服务器。

具体流程(哈希模式):

  1. 前端项目写完之后,把src件夹打包 (利用webpack、babel把项目里面的jsx / vue 、scss文件变异成js、css和html),命令如下

npm run build

完成之后会出现 dist 文件夹,里面包含:

该html文件需部署在服务器上才能正常显示(只有一个html文件,是因为项目本身是SPA),

新建static文件夹,将dist里面的文件放入static。

  1. 搭建服务器

新建一个文件夹用vscode打开后,

npm init

// 然后设置 package name,回车

npm i express

接着新建 server.js文件:

// common.js 规范

复制代码
    // 引入 express
    const express = require('express')
    // 利用中间件 给服务器指定静态资源(打包后的项目文件)
    app.use(express.static(__dirname+'/static'))
    // 新建实例
    const app = express()
    // 配置后端路由
    app.get('/person',(request,response)=>{
    // 给浏览器返回的信息
        response.send({
            name:'tom',age:19
        })
    })
    // 开启监听
    app.listen(5005,(err)=>{
      if(!err) conslole.log('服务器启动成功!')
    })
  1. 启动服务器

node server

可以看到:

浏览器输入localhost:5005/person ,查看信息:

history 模式下刷新出现 404解决

  1. 根据前端发送的请求以及后端已有的资源路径做判断(正则)匹配,区分哪些是前端路由哪些是后端路由。

  2. nginx 中间代理区分前后端路由

  3. node.js提供的中间件Connect

npm instal connect-history-api-fallback

// common.js 规范

复制代码
// 引入 express
    const express = require('express')
 
    const history = require('connect-history-api-fallback');
 
    // 新建实例
    const app = express()
 
    app.use(history());
 
    // 利用中间件 给服务器指定静态资源(打包后的项目文件)
    app.use(express.static(__dirname+'/static'))
 
    // 配置后端路由
    app.get('/person',(request,response)=>{
    // 给浏览器返回的信息
        response.send({
            name:'tom',age:19
        })
    })
    // 开启监听
    app.listen(5005,(err)=>{
      if(!err) conslole.log('服务器启动成功!')
    })
相关推荐
竹林8184 小时前
用 wagmi v2 + viem 监听链上事件,我踩了三天坑终于搞懂了实时日志与历史补全
javascript
只一4 小时前
😭从回调地狱到 async/await:一文打通 Ajax 与 JS 异步编程
javascript
weedsfly4 小时前
语法糖褪去之后——Babel 转译产物中的 JavaScript 本貌
前端·javascript
JustHappy4 小时前
「软件设计思想杂谈🤔」“切图仔”也能懂编译原理?框架源码也许没那么难。聊聊 Vue 的编译(上)
前端·javascript·vue.js
晓得迷路了5 小时前
栗子前端技术周刊第 134 期 - React Router v8、TypeScript 7 RC、React Native 0.86...
前端·javascript·react.js
代码煮茶21 小时前
React 组件封装方法论 —— 以 Todo App 为例
javascript·react.js
任沫21 小时前
Agent之Function Call
javascript·人工智能·go
默_笙1 天前
🛬 我让 AI 帮我写了一个打飞机游戏,结果 Canvas 把我整不会了
前端·javascript
梯度不陡1 天前
AI 到底能不能从零写软件?ProgramBench 和 RepoZero 给出了两种答案
前端·javascript·面试
胡萝卜术1 天前
滑动窗口最大值:从暴力到单调队列,层层优化全解析
前端·javascript·面试