博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
node服务适配前端路由
阅读量:6883 次
发布时间:2019-06-27

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

可能网上已经大把类似的资料了,在这里只不过是总结一下

用react举例

在react-router 4.0版本中,BrowserRouter和HashRouter都可以实现前端路由的功能,区别是前者基于rul的pathname段,后者基于hash段。

前者:http://127.0.0.1:3000/a/b

后者:http://127.0.0.1:3000/#/a/b(有个#总是让人难以接受)

这样的区别带来的直接问题就是当处于二级或多级路由状态时,刷新页面,BrowserRouter会将当前路由发送到服务器(因为是pathname),而HashRouter不会(因为是hash段)。

通常我们都是使用BrowserRouter,前端路由在刷新浏览器的时候会被认为是服务器的路由被发送到服务器,然而服务器并没有配置相关的路由,然后浏览器当前的链接就会显示404。

可以在node代码中添加这么一段代码:

app.use(function(req, res, next) {        fs.readFile(path.resolve(__dirname, '../server_file/dist/mobile.html'), function(err, data){            if(err){                console.log(err);                res.send('后台错误');            } else {                res.writeHead(200, {                    'Content-type': 'text/html',                    'Connection':'keep-alive'                });                res.end(data);            }        })    });复制代码

这段代码的意思就是说,只要服务器接收到浏览器发送过来的路由,在这个路由没有在node中配置的情况下,都会尝试着把前端页面发送回去,然后浏览器再去匹配前端路由。

我认为这其中需要注意的地方:

前端路由和后端路由不能出现重复。

多个单页面的时候应该如何配置?

前端打包多个单页面应该不是新鲜话题了,工作中有时候也会用到。

前端文件在后端也是通过相应路由来发送的,比如说/mobile,就是发送mobile相关的html文件,/pc就是发送pc相关的html文件。

在mobile的这个单页面中,需要node适配前端的路由,在pc的这个单页面中,也需要node适配前端路由。要解决的问题就是让node知道浏览器当前打开的到底是mobile还是pc。

我的做法是前端路由能适配node对应的路由,然后跟上述方法一样,把多余的路由的请求统一返回对应文件

mobile前端路由这样:

复制代码

后端路由这样:

app.use('/mobile', function(req, res, next) {        fs.readFile(path.resolve(__dirname, '../server_file/dist/mobile.html'), function(err, data){            if(err){                console.log(err);                res.send('后台错误');            } else {                res.writeHead(200, {                    'Content-type': 'text/html',                    'Connection':'keep-alive'                });                res.end(data);            }        })    });复制代码

PC前端路由这样:

复制代码

后端路由这样:

app.use('/pc', function(req, res, next) {        fs.readFile(path.resolve(__dirname, '../server_file/dist/pc.html'), function(err, data){            if(err){                console.log(err);                res.send('后台错误');            } else {                res.writeHead(200, {                    'Content-type': 'text/html',                    'Connection':'keep-alive'                });                res.end(data);            }        })    });复制代码

完!

转载于:https://juejin.im/post/5c89c9a1e51d454f4202f724

你可能感兴趣的文章
SCCM2012系列之八,SCCM2012客户机发现
查看>>
[Web开发] 检测IE版本号的方法总结
查看>>
普通PC机上安装XenServer
查看>>
fuse-dfs的设定手册
查看>>
SharePoint 2010 & Office 2010 reach RTM !
查看>>
Vmware vSphere 5.0实战教程之二 vMotion及Storage vMotion实战
查看>>
你的Winxp是不是原版,一看就知
查看>>
ubuntu下编译Android出现的问题
查看>>
C# 8.0的三个令人兴奋的新特性
查看>>
关于ip_conntrack跟踪连接满导致网络丢包问题的分析
查看>>
烂泥:linux学习之VNC远程控制(一)
查看>>
IT技术晋级之路-VM中系统安装
查看>>
SNIA持久化内存峰会:虚拟机、数据库、SDS进展曝光
查看>>
[Android]AndroidInject增加sqlite3数据库映射注解(ORM)
查看>>
Oracle RAC负载均衡和透明应用失败切换的配置和测试过程(二、配置实例)
查看>>
《Effective C#》读书笔记——条目3:推荐使用is或as而不是强制转换类型<C#语言习惯>...
查看>>
时间复杂度总结
查看>>
美国诚实签经验——不要抢答,两个人一起签,要让与社会交流多、表达能力强的人为主导,抓住问题核心回答,重要问题回答时补充材料...
查看>>
xhEditor for .net (支持上传,远程抓图)
查看>>
bleve搜索引擎是支持基于field搜索的
查看>>