博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
react项目运用BrowserRouter上线后在非根路由情况下刷新出现404问题的解决方法 -- Koa...
阅读量:5963 次
发布时间:2019-06-19

本文共 1053 字,大约阅读时间需要 3 分钟。

问题

先上react App代码

class App extends React.Component {  render() {    return (      
to lottery
in a
} exact />
) }}

clipboard.png

点击后可以正常跳转至lottery路由,忽略丑陋的界面...

clipboard.png

这时刷新就404找不到页面了

clipboard.png

原因

react的BrowserRouter用的是Html5提供的HistoryApi方法,Link组件实际上是调用了History.pushState(),然后通过监听history状态去展示或者隐藏组件。所以当刷新时,也就是向服务器发送了这个路径的请求,而服务器上实际是没有对这个路径的请求做任何处理的,故返回的是404。

解决方法 -- 用的是koa搭建服务器

app.use(views(path.resolve(__dirname, '../www/dist'), {extension: 'html'}))app.use(async (ctx, next) => {  console.log(ctx.path)  await next()})app.use(router.routes())router.all(/\.js/i, static(path.resolve(__dirname, '../www/dist')))router.all('*', async ctx => {  await ctx.render('index')})

这里需要注意的是koa-views提供的render方法是异步的,所以要用await,否则也是返回404,相当于对路由没有进行任何处理。

只要不是以.js结束的路由请求都返回index.html,js类型的就从项目打包出来的静态资源里找,相当于把路由的控制权交给了前端。

前端react App只需要对匹配不到的路由做下处理就ok了。

in a
} exact />
404页面
}>

转载地址:http://bqjax.baihongyu.com/

你可能感兴趣的文章
ElasticSearch Client详解
查看>>
新零售讲堂之时代下的传统零售业,何去何从?
查看>>
c++读取和写入TXT文件的整理
查看>>
linux安全问答(1)
查看>>
mybatis update返回值的意义
查看>>
expdp 详解及实例
查看>>
解读最具O2O属性—哈根达斯微信企业号的成功之道
查看>>
Extjs4.x (MVC)Controller中refs以及Ext.ComponentQuery解析
查看>>
Server-01 How to Find the Remote Desktop Port
查看>>
Java--接口、抽象与继承
查看>>
通过IP判断登录地址
查看>>
Oracle闪回技术
查看>>
利用单壁路由实现vlan间路由
查看>>
hello world
查看>>
CentOS 7 配置yum本地base源和阿里云epel源
查看>>
python 学习导图
查看>>
生成树
查看>>
深入浅出JavaScript (五) 详解Document.write()方法
查看>>
Beta冲刺——day6
查看>>
Comet OJ - Contest #3 题解
查看>>