CNode

怎样用express.router很好的控制我的mobile网页和普通网页渲染?

问答
Zzhangnan发布于12 年前最后回复12 年前7 回复5437 浏览0 收藏

其实我可以轻松地在每个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)

S
skipify#1·12 年前

感觉这种情况下应该是组织你的文件结构更好一些 一般来说 手机站 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方法来直接实现更简单?

D
duoduoyi#2·12 年前

抽像个base.js出来, 里面实现render并判断浏览器类型

router里面调用 base.render(req, res, 'index');

我是这么做的=。=

M
meekr#3·12 年前

最好做成responsive的html,这样就不用区分mobile和pc了

Z
zhangnan#4·12 年前
引用 ycloudvar views = isTablet ? 'mobile' : 'views'; app.set('views', views);

@ycloud app.set只能在node初始化的时候调用,这样改似乎不行。

T
tanker327#5·12 年前

能不能 if(req.useragent == isTablet)res.redirect('/mobile'+req.url);

Y
ycloud#7·12 年前

var views = isTablet ? 'mobile' : 'views'; app.set('views', views);

参与回复
登录后即可参与回复。登录