如题,新手在测试前端路由
在前端实现路由以后,比如localhost:8080/index
和localhost:8080/home
绑定到了两个不同的组件
然后我想 npm run build,把生成的前端文件使用 flask 做服务器跑。
测试得到的实际结果是
在测试状态下使用 node 运行的 npm run serve 服务器,前端路由功能正常,手动输入路由地址也会按照设定的前端路由逻辑执行。
部署之后的 flask 服务器,如果单纯使用 js 内容进行链接跳转(比如使用 <router-link> 标签跳转),前端路由也是工作正常的。但是如果手动输入地址的话则会请求后端路由,而不会被前端路由拦截。(后端没有挂载相应的路由地址,所以返回 404 )</router-link>
想请教一下各位带佬这个前后端路由结合的部署该怎么搞。 我想实现两个阶段的目标 1、一阶段是实现浏览器地址栏输入的所有跳转命令由 vue 拦截,使前端路由完全工作正常,不发送给 flask 2、二阶段是在一阶段的基础上我希望有一些路由被过滤掉,比如特定 api 的 get 或 post 地址,或者特定页面(比如登录页面),不由前端托管,仍然是直接请求后端(比如单独把不需要登录权限的页面,和需要权限的页面拆分出来做成两个页面,感觉安全性比较高)
请问可以实现吗
1
moyupoi 2020-03-08 20:47:11 +08:00 via iPhone
初始化时候吧路由请求下来,然后放 redux 里,用的时候取就行了
|
2
randyo 2020-03-08 21:01:49 +08:00 via Android
地址栏输入地址回车是一定需要后端路由的。后端需要返回入口页面。
|
3
TmacV2 2020-03-08 21:02:56 +08:00 via iPhone
新手同问
|
4
black11black OP |
5
moyupoi 2020-03-08 21:20:10 +08:00 via iPhone
redux 只是名字和 react 差不多,实际上 redux 只是个中间件做状态管理,给谁用都行。你用 redux 也可以,用 vuex 也可以,只是把数据存储在缓存里,用的时候拿出来用,减少接口重复调用,也保证了跨页面同步数据
|
6
lupkcd 2020-03-08 21:24:10 +08:00
hash/history 模式了解一下
|
7
randyo 2020-03-08 21:51:34 +08:00 via Android
@black11black 刷新页面浏览器请求后端,拿到 index 页面的内容,然后开始解析,加载 js 并执行,js 根据地址栏来确定要渲染哪个页面。一切都是从 index 开始的。
|
8
shintendo 2020-03-08 21:55:03 +08:00
|
9
gwy15 2020-03-08 22:05:41 +08:00 1
我梳理下楼主的逻辑,是不是这样的:
前端引入 router 负责(部分不需要权限页面的)路由,但是后端( flask )也要管理部分需要鉴权的页面; API 部分还是由 flask 做。 问题就在于如何在 前端负责路由的页面 和 后端负责路由的页面 之间进行跳转。 这种杂交模式有点难受啊 XD 不过应该可以实现,后端 nginx 像这样写: location / { try_files @flask_app /index.html =404; } 会先尝试匹配 flask,没匹配到路由全部返回 SPA 渲染的 html。 前端跳转对 route 里面的 meta 进行判断,如果需要鉴权使用正常跳转( location ),不需要鉴权直接用 router.push。 |
10
thetbw 2020-03-08 22:38:03 +08:00 via Android
后端处理一下 404 错误,全都返回 vue 的 index.html,然后 vue 这时不就可以处理了吗,vue 如果没这个路由,由 vue 来处理 404 错误。不知道你觉得这样如何
|
11
black11black OP @gwy15
感谢,nginx 配置是一个很好的 route 思路。 我的方案不用 nginx 也配出来了,更在 append 里。 杂交主要的考量是看 vue 路由文档似乎有权限功能,没仔细看不知道是咋实现的,我窃以为即使后端做好权限管理,最好还是在无权限时不发送任何前端界面数据以避免攻击。不知道单纯使用前端路由的话能否实现在非认证状态下用户拿不到任何非认证界面之外的数据 |
12
gwy15 2020-03-08 22:54:34 +08:00
@black11black 理论上是可以的,比如动态加载路由、把涉及到鉴权的静态文件要求 CDN 鉴权、给 nginx 加上 JWT 插件等等操作。但是这样仅仅能解决暴露静态文件给非授权用户,我认为即使将静态文件暴露给非授权用户并不是什么大不了的问题,与这一堆操作的成本不成正比。
|
13
black11black OP @gwy15
我觉得问题也不大,应该不用一定 nginx 重定向,可以服务端加个中间件搞定。 |
14
suningyo 2020-03-09 09:49:41 +08:00
|
15
yimity 2020-03-09 20:49:55 +08:00
配置一下服务端或者服务端的软件,404 的时候返回 index.html 就可以了。
|