静态文件与express.js

我想为index.html/media子目录提供静态文件。 索引文件应该在/index.html/ URL中提供。

我有

 web_server.use("/media", express.static(__dirname + '/media')); web_server.use("/", express.static(__dirname)); 

但第二行显然服务于整个__dirname ,包括其中的所有文件(不只是index.htmlmedia ),我不想。

我也试过了

 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.sendFileexpress.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 ); })