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 ...
随机推荐
- install mysql from source and troubleshooting example
I tried to install MySQL 5.7 from source file and upgrading previous MySQL version to the lastest 5. ...
- 常用的OO设计原则
常用的OO设计原则: 1 封装变化:找出应用中可能需要变化之处,把它们独立出来,不要和哪些不需要变化的代码混在一起. 2 针对接口编程,而不是针对实现编程. 3 多用组合,少用继承. 4 松耦合:为了 ...
- 吴裕雄 python深度学习与实践(16)
import struct import numpy as np import matplotlib.pyplot as plt dateMat = np.ones((7,7)) kernel = n ...
- MFC笔记3
1. C6有默认的提示代码功能,但是其默认的快捷键是Ctrl + Space,这一般情况下是切换输入法快捷键,所以,只需重新设置一下快捷键就可以实现提示代码功能,具体设置位置如下: 工具(T) -&g ...
- python 处理时间 datetime 三板斧
import datetime1)#str -> datetime对象,(datetime对象之间可加减,date[0]为str) datetime.datetime.strptime(date ...
- idea2017启动ssm项目卡在build阶段后报outofmemory
如上图,设置build process heap size(Mbytes)(构建过程堆大小(单位MB))为4000,即约4GB.之前设置的是700,修改之后问题解决. 补充:导入新项目后,此参数会初始 ...
- 基于Gitlab统计代码行--统计所有仓库、所有提交人的代码总行数(新增加-删除)
公司绩效考核要求,统计GITLAB仓库所有人提示有效代码行业 脚本1: 统计所有仓库.所有提交人的代码总行数(新增加-删除) 脚本2: 统计所有仓库.所有提交人的代码提交汇总与删除汇总 脚本3: 统计 ...
- MYSQL、SQL在LIKE里传的参数没有赋进去的原因
SQL语句 = string.Format(" where name like '%@key%' "); para.Add(new MySqlParameter("@ke ...
- 微软Office Online服务安装部署(三)
现在开始配置两台服务器,两台服务器的IP: Server: 10.1.3.89 Client: 10.1.3.92 1.在Client中,.打开网络属性,找到ipv4的配置,将dns 改成域控制器的 ...
- 电子商务系统+java+web+完整项目+包含源码和数据库Java实用源码
鸿鹄云商大型企业分布式互联网电子商务平台,推出PC+微信+APP+云服务的云商平台系统,其中包括B2B.B2C.C2C.O2O.新零售.直播电商等子平台. 分布式.微服务.云架构电子商务平台 java ...