怎样用express.router很好的控制我的mobile网页和普通网页渲染?
发布于 9 年前 作者 zhangnan 4505 次浏览 最后一次编辑是 8 年前 来自 问答

其实我可以轻松地在每个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 这个方法也挺好的。

回到顶部