弄了几天终于用node实现了类型百度的那种域名重定向。输入baidu.com,他会自动跳转到https://www.baidu.com。(这里不说https的问题)。前端能实现这个东西,为了b格高一点,还是选择在服务器端处理。
输入baidu.com
自动跳转到www.baidu.com
就是想要达到这种想过。最开始想到的是域名重定向,网上搜索了一下,基本上都是说的使用res.redirect()这个方法。具体的怎么做没有说。只有自己慢慢研究了。先就是把这个方法直接加到node里面去
app.get('/*',function(req,res){ res.redirect(302, 'http://www.meetqy.com/'); });
直接这样写的最后浏览器报错。
这个错误很低级。当时是不知道的。每次进入页面的时候,node就去执行
res.redirect(302, 'http://www.meetqy.com/');
然后就一直重定向到这个链接。每次链接还都一样,就报错了。后来想了个办法获取请求地址。使用req.hostname。可以获取到。
app.get('/*',function(req,res){ if(req.hostname == 'meetqy.com') return res.redirect(302, 'http://www.meetqy.com/'); });
这样是可以解决这个域名重定向的问题的。但是后面如果你要写接口,或则路由什么的。根本进去不了。全部被这个重定向过去了。最后接口就报404错误。假如有个这种的。
app.get('/about',function(req,res){ res.render('about'); });
这个方法就进去不到,404。都走到这里了肯定不能放弃啊,再想想其它的。发现又一个app.use()这个方法。说下我对这个方法的理解
app.use('/*',function(req,res,next){ console.log(req.hostname); next(); });
把这个方法放在所有路由/接口的最前面,都会先走这个方法,然后在执行它后面的方法。一定要加next(),不然浏览器会一直处于等待响应状态。后面的方法也不会执行。
我试过放在最后面发现如果前面有满足条件的接口/路由,就进不去。(可能是因为javascript是单线程的原因吧,代码顺序执行的。)
最后实现这个重定向的代码:
app.use('/*',function(req,res,next){ if(req.hostname == 'meetqy.com') return res.redirect(302, 'http://www.meetqy.com/'); next(); });
就这样3行代码实现了域名重定向的功能。