我想提供静态文件“web.html”和“mobile.html”,但只有在用户通过网络/移动设备连接时才发送。
我认为这是执行此操作的代码:
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
app.use(express.static(__dirname + '/public', {index: false}));
app.get('/', function (req, res) {
console.log("user connected");
if (req.headers['user-agent'].match('mobile')) {
res.sendFile(__dirname + '/public/mobile.html');
} else {
res.sendFile(__dirname + '/public/web.html');
}
});
但此代码不起作用。根据我的理解,express.static将仅在请求'/'时提供index.html。有没有办法在请求'/'时提供特定文件?
谢谢!
答案 0 :(得分:1)
<script src="/scripts/script.js"></script>
在索引文件或HTML文件中使用上述行。
var app=express();
app.use(express.static(__dirname + '/assets'));
在app.js或节点js应用程序的起点中使用它。 在根级别创建资产文件夹。 Inside assets文件夹中有子文件夹:Images,CSS和Scripts
答案 1 :(得分:0)
检查express-device。它完成了我认为你想要做的事情(制作移动版和桌面版)。
答案 2 :(得分:0)
你的基本逻辑是正确的;问题出在移动检测上。在许多移动浏览器中(我刚在iPhone上试过这个),UA字符串有&#34; Mobile&#34; (使用大写&#34; M&#34;),并且您在小写字母上匹配。我改为:
if (req.headers['user-agent'].match(/\bmob/i)) {
/\bmob/i
是我通常用于移动检测的内容;我发现它非常坚固。更好的选择可能是@ user3229720的答案,这可以防止您不必担心UA解析的混乱细节,但我想您可能想要更详细地了解这里发生了什么。