node js express app提供静态文件

时间:2014-11-19 19:19:23

标签: javascript node.js express

我想提供静态文件“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。有没有办法在请求'/'时提供特定文件?

谢谢!

3 个答案:

答案 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解析的混乱细节,但我想您可能想要更详细地了解这里发生了什么。