Express.compress和移动设备

我试图通过他们的设备向客户展示不同的网站。 也就是说,移动用户可以通过移动应用程序和桌面用户获得networking应用程序。

这是我的代码:

var express = require('express'), app = express(); app.get('/', function(req, res) { var ua = req.header('user-agent'); // Check the user-agent string to identyfy the device. if(/mobile|iphone|ipod|android|blackberry|opera|mini|windows\sce|palm|smartphone|iemobile|ipad|android|android 3.0|xoom|sch-i800|playbook|tablet|kindle/i.test(ua)) { console.log("mobile"); app.use('/', express.static(__dirname + '/mobile-app/www')); res.sendfile(__dirname + '/mobile-app/www/index.html'); } else { console.log("web"); app.use('/', express.static(__dirname + '/web-app/www')); res.sendfile(__dirname + '/web-app/www/index.html'); } }); 

每个应用程序工作正常 但是,如果我使用Chromenetworking工具更换设备,然后刷新,则不会加载其他设备。 也就是说,如果第一个服务实例是在networking应用程序,我刷新移动应用程序…移动应用程序将无法正常工作。 如果第一个服务实例在移动应用程序上,那么刷新到Web应用程序意味着这将不会加载。

有没有关于如何做得更好的想法?

谢谢

它不起作用,因为app.use实际上是添加了一个接一个执行的中间件 。 所以第一次打开网页时,你会说' 从现在起,从这个目录中提供公共文件 '。 然后,当你打开另一种设备时,你做同样的事情。

您的节点服务器应用程序正在运行,只有一个适用于所有设备 。 你应该做的是提供内容给用户取决于它的设备。 所以它更像是发送正确的html文件(你现在正在做什么),并从那个特定的文件夹加载资源。 你甚至可以dynamic地传递文件夹,如:

 if (mobile) { res.render('template', { resourcesFolder: '/assets/mobile/ }); } else { res.render('template', { resourcesFolder: '/assets/desktop/ }); } 

在那里,在你的模板(使用一些模板引擎!)使用它像:

 <img src="{{ resourcesFolder}}image.jpg" /> 

这样,您可以轻松切换显示哪个图像,具体取决于您刚刚通过的resourcesFoldervariables。 它可以根据用户平台而有所不同。 所以这是客户端的依赖,而不是依赖于应用