我们在开发时可能会遇到这种问题。你用的手机端需要跳转到 m,xxx.com ,PC端跳转到taobao.com
这样一个功能我们可以通过nodejs和user-agent属在这里插入代码片
性判断来实现。在项目跟文件创建一个server.js,具体代码如下:
const express = require('express');
const next = require('next');
const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev });
const handle = app.getRequestHandler();
const server = express();
app.prepare().then(() => {
server.get('/', async (req, res) => {
const deviceAgent = req.headers['user-agent'].toLowerCase();
//如果匹配到移动端标识符,则为移动端
const agentID = deviceAgent.match(/(iphone|ipod|ipad|android)/);
if (agentID) {
res.redirect(301, 'http://www.m.url.com');
} else {
res.redirect(301, 'http://www.url.com');
}
});
server.get('*', (req, res) => {
return handle(req, res);
});
server.listen(3000, err => {
if (err) throw err;
console.log('> Ready on http://localhost:3000');
});
});
由于加入了node.js,所以更改package,json里的启动命令如下:
切记,如果你使用电脑的调试工具打开手机调试,请先打开手机调试工具,然后在输入localhost:3000.因为一旦认定你使用移动设备,3000端口将会默认跳转到m.url,com,你在切换到PC调试,仍然会跳转到m.url.com,因为路由跳转可能存在缓存 。所以如果要再次测试最好开启无痕操作。
欢迎有经验的同学分享一下taobao,jd的h5页面的路由跳转的逻辑,为什么pc调试和手机调试来回切换,他们都可以正确跳转到不同的url。