怎样用express.router很好的控制我的mobile网页和普通网页渲染?
其实我可以轻松地在每个router里写上判断,例如:
router.get('/',function(req, res){
if (isTablet) {
res.render('mobileIndex')
} else {
res.render('index')
}
});
router.get('list',function(req, res){
if (isTablet) {
res.render('mobileList')
} else {
res.render('list')
}
});
但这样未免太丑陋了 我想这样:
app.use(function (req, res, next) {
if (req.useragent == isTablet) {
router = mobileRouter
} else {
router = router
}
next()
})
mobileRouter.get('/',function(req, res){
res.render('index')
});
router.get('/',function(req, res){
res.render('index')
});
- 注:这些都是伪代码*
结果我发现如果在app.use里动态更改router是没用的,但也没报错,只是不执行,页面会500。
甚至我想动态的更改静态目录,这样我就不用在意img.src到底该写mobile/img还是/img了
app.use(function (req, res) {
if(req.useragent == isTablet) {
app.use(express.static(path.join(__dirname, 'dest')));
} else {
app.use(express.static(path.join(__dirname, 'dest/mobile')));
}
})
请问各位大哥有什么比较好的办法吗?跪求啊
7 回复
感觉这种情况下应该是组织你的文件结构更好一些 一般来说 手机站 PC站的数据基本一样,或者些许不同 是不是可以考虑 单独一个文件夹、。
app.use(function (req, res, next) {
if (req.useragent == isTablet) {
path = 'wap/'
} else {
path = ''
}
next()
})
router.get('/',function(req, res){
res.render(path+'index')
});
甚至你是不是可以重写render方法来直接实现更简单?
抽像个base.js出来, 里面实现render并判断浏览器类型
router里面调用 base.render(req, res, ‘index’);
我是这么做的=。=
最好做成responsive的html,这样就不用区分mobile和pc了
能不能 if(req.useragent == isTablet)res.redirect(’/mobile’+req.url);
var views = isTablet ? ‘mobile’ : ‘views’; app.set(‘views’, views);
@ycloud app.set只能在node初始化的时候调用,这样改似乎不行。
@duoduoyi 这个方法也挺好的。