koa-static与react-create-app搭配的路径
概述
前端路由与后端路由的结合一直是一个难题。koa-static这个中间件能够把静态资源“搬到”后端路由上面去,react-create-app在不解构的情况下只会把资源打包到build文件夹,怎么协调koa-static,react-create-app和react-router-dom?我摸索出了一个解决方案,记录下来,供以后开发时参考,相信对其他人也有用。
源码可以参考我的github。
文件结构
我们的koa服务器的地址为:http://localhost:3000/,文件结构如下:
├── controllers #后端
├── models #后端
├── routes #后端路由
├── node_modules
├── static #前端react文件夹
│ ├── build #react-create-app打包默认地址(需要先打包)
│ ├── node_modules
│ ├── public
│ ├── src
│ └── package.json等配置
│
├──app.js #后端启动文件
└──package.json等配置
前端路由
前端路由是由react-router-dom控制的,我们需要创造一个中间路径,我命名为react-blog,代码如下:
<Router>
<Switch>
<Route path='/react-blog' component={Layout} />
<Redirect from='/' to='/react-blog'/>
</Switch>
</Router>
我们的目的是要把'/'路径映射到'/react-blog'路径,这样react的静态资源路由就不会影响到全局路由。
koa-static
koa-static这个中间件起一个映射的作用,它把被映射的文件夹全部映射到http://localhost:3000/下面,我们关于koa-static这个中间件的代码如下:
//app.js
//koaStatic
app.use(koaStatic(
path.join(__dirname, './static')
));
这样就可以把static文件夹下的资源全部映射到http://localhost:3000/下面,我们在浏览器中输入如下地址则可访问相应的文件。
//访问前端react文件夹下的package.json文件
http://localhost:3000/package.json
//访问前端react打包后的index文件
http://localhost:3000/build/index.html
这个时候我们能通过http://localhost:3000/build/index.html访问我们的react静态资源,访问的时候路由会自动交给前端路由,并且跳转到http://localhost:3000/react-blog这个地址。
但是当我们在另一个浏览器标签里面输入http://localhost:3000/react-blog这个地址的时候,会返回404,原因是我们的后端路由并没有react-blog这个选项,所以我们需要继续配置后端路由。
koa-router
我们用koa-router另外开一个后端路由,来处理http://localhost:3000/react-blog这个路径,代码如下:
//blog.js
const Router = require('koa-router');
let routerBlog = new Router();
routerBlog.get('*', async (ctx) => {
ctx.redirect('/build/index.html');
})
module.exports = routerBlog;
//router.js
const routerBlog = require('./blog');
let router = new Router();
router.use('/react-blog', routerBlog.routes(), routerBlog.allowedMethods());
module.exports = router;
上面的代码把路径http://localhost:3000/react-blog下的所有路径全部导向http://localhost:3000/build/index.html,这样它会自动跳转到react静态资源,并且把路由交给前端路由。
其它
上面就基本实现了前端路由和后端路由相结合。
但是还美中不足的是,所有指向前端静态资源的url都会跳转到前端静态资源的主页。这就造成了一个bug,就是我收藏了前端静态资源其中的一个页面,当我下次想打开这个页面的时候只会跳到主页,并不会跳到这个页面。
这个bug留待后续优化了,思路是用正则截取后面的路径,然后通过传参传给前端路由,再由前端路由处理。
koa-static与react-create-app搭配的路径的更多相关文章
- react create app ,nginx服务器配置
server{ listen 80; server_name www.domain.com domain.com; location ~* \.js$ { root /home/hard/Projec ...
- 利用 Create React Native App 快速创建 React Native 应用
本文介绍的 Create-React-Native-App 是非常 Awesome 的工具,而其背后的 Expo 整个平台也让笔者感觉非常的不错.笔者目前公司是采用 APICloud 进行移动应用开发 ...
- React Native APP结构探索
APP结构探索 我在Github上找到了一个有登陆界面,能从网上获取新闻信息的开源APP,想来研究一下APP的结构. 附上原网址:我的第一个React Native App 具体来讲,就是研究一个复杂 ...
- React Native App设置&Android版发布
React Native系列 <逻辑性最强的React Native环境搭建与调试> <ReactNative开发工具有这一篇足矣> <解决React Native un ...
- React Native & app demos
React Native & app demos https://github.com/ReactNativeNews/React-Native-Apps https://github.com ...
- 10 个打造 React.js App 的最佳 UI 框架
10 个打造 React.js App 的最佳 UI 框架 在本文中,我们将分享一些助你打造 React.js App 最佳的 UI 框架.它们具备你所需要的基本 React 组件,以及易用的 API ...
- how to solve error when start Hyper-V quick create app error
After checked the requirements on Hyper-v by run "systeminfo.exe" in cmd window, then I en ...
- React & Desktop App
React & Desktop App https://proton-native.js.org/#/ https://github.com/kusti8/proton-native
- [译] Facebook:我们是如何构建第一个跨平台的 React Native APP
英文原文(需FQ):https://code.facebook.com/posts/1189117404435352/ 早些时候,我们介绍过iOS版的React Native. React Nativ ...
随机推荐
- java学习-- equals和hashCode的关系
hashcode的目的就是在hashset或者hashmap等中比较两个对象相等时,减少equals的使用次数来提高效率 以下为摘录 java中hashcode和equals的区别和联系 HashSe ...
- svn的下载及安装
什么是SVN: SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS.CVS,它采用了分支管理系统,它的设计目标就是取代CVS. SVN的下载安装: 下载地址:https: ...
- android rc文件分析
service vold /system/bin/vold \ --blkid_context=u:r:blkid:s0 --blkid_untrusted_context=u:r:bl ...
- cdnbest日志分析显示404的原因
日志分析报404原因 报这个提示一般是日志没有开启或还没有日志 检查下面几点: 开启和关闭站点日志在节点3311中显示如下图nolog是关闭 日志翻转目前默认是1个小时以后会默认改成20分钟,翻转时 ...
- TPL DataFlow初探(二)
上一篇简单的介绍了TDF提供的一些Block,通过对这些Block配置和组合,可以满足很多的数据处理的场景.这一篇将继续介绍与这些Block配置的相关类,和挖掘一些高级功能. 在一些Block的构造函 ...
- 转:centos查看实时网络带宽占用情况方法
Linux中查看网卡流量工具有iptraf.iftop以及nethogs等,iftop可以用来监控网卡的实时流量(可以指定网段).反向解析IP.显示端口信息等. centos安装iftop的命令如下: ...
- flutter 自己整理
2018-05 资料 常见问题解决处 https://flutter.io/flutter-for-android/ 起步 api widget https://flutter.io/docs/ 其他 ...
- java 期末考试复习
//Scanner这样写? Scanner input = new Scanner(System.in); //不断获得下一个单词 names[i] = toTitleCase(input.nex ...
- javaweb开发.页面中文乱码问题
1.设置eclips , window->Preferences->web->JSP Files中的Encoding选项为UTF-8 2.修改jsp文件头部为UTF-8 <%@ ...
- Luogu3587[POI2015]POD - hash + 单调队列
Solution 还是去看了题解. 感谢大佬的博客→ 题解传送门 是一道思路比较新的题. 搞一个前缀和, 记录前 $i$ 个位置每种颜色的出现次数, 如果位置 $i$ 是 颜色 $a[i]$ 的最后 ...