静态文件与express.js
我想为index.html
和/media
子目录提供静态文件。 索引文件应该在/index.html
和/
URL中提供。
我有
web_server.use("/media", express.static(__dirname + '/media')); web_server.use("/", express.static(__dirname));
但第二行显然服务于整个__dirname
,包括其中的所有文件(不只是index.html
和media
),我不想。
我也试过了
web_server.use("/", express.static(__dirname + '/index.html'));
但是访问基本URL /
然后导致请求到web_server/index.html/index.html
(double index.html
组件),这当然会失败。
有任何想法吗?
顺便说一下,我可以find关于这个主题( static()
+它的参数)Express中绝对没有文档…令人沮丧。 文档链接也是受欢迎的。
express.static()
期望第一个参数是一个path ,而不是文件名。 我会build议创build另一个子目录来包含你的index.html
并使用它。
在Express 文档中提供静态文件。
如果你有这个设置
/app /public/index.html /media
那么这应该得到你想要的
var express = require('express'); //var server = express.createServer(); // express.createServer() is deprecated. var server = express(); // better instead server.configure(function(){ server.use('/media', express.static(__dirname + '/media')); server.use(express.static(__dirname + '/public')); }); server.listen(3000);
诀窍是把这条线作为最后的回退
server.use(express.static(__dirname + '/public'));
至于文档,由于Express使用连接中间件,我发现直接查看连接源代码更容易。
例如这一行显示index.html被支持https://github.com/senchalabs/connect/blob/2.3.3/lib/middleware/static.js#L140
在最新版本的expression“createServer”被弃用。 这个例子适用于我:
var express = require('express'); var app = express(); var path = require('path'); //app.use(express.static(__dirname)); // Current directory is root app.use(express.static(path.join(__dirname, 'public'))); // "public" off of current is root app.listen(80); console.log('Listening on port 80');
res.sendFile
& express.static
都会为此工作
var express = require('express'); var app = express(); var path = require('path'); var public = __dirname + "/public/"; // viewed at http://localhost:8080 app.get('/', function(req, res) { res.sendFile(path.join(public + "index.html")); }); app.use('/', express.static(public)); app.listen(8080);
其中public
是客户端代码所在的文件夹
npm安装serve-index
var express = require('express') var serveIndex = require('serve-index') var path = require('path') var serveStatic = require('serve-static') var app = express() var port = process.env.PORT || 3000; /**for files */ app.use(serveStatic(path.join(__dirname, 'public'))); /**for directory */ app.use('/', express.static('public'), serveIndex('public', {'icons': true})) // Listen app.listen(port, function () { console.log('listening on port:',+ port ); })