我想服务index.html和/media子目录作为静态文件。索引文件应该同时在/index.html和/ URLs中提供。
我有
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组件)的请求,这当然会失败。
什么好主意吗?
顺便说一下,我在Express中绝对找不到关于这个主题的文档(static() +它的params)…令人沮丧。文档链接也很受欢迎。
如果你有这样的设置
/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
res.sendFile & express。静态两者都适用
var express = require('express');
var app = express();
var path = require('path');
var public = path.join(__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);
客户端代码所在的文件夹在哪里是公共的
根据@ATOzTOA的建议,并由@Vozzie澄清,路径。Join以Join的路径作为参数,+则将单个参数传递给path。
NPM安装server -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 );
})
如果您有一个复杂的文件夹结构,例如
- application
- assets
- images
- profile.jpg
- web
- server
- index.js
如果你想从index.js中提供资产/图像
app.use('/images', express.static(path.join(__dirname, '..', 'assets', 'images')))
从浏览器查看
http://localhost:4000/images/profile.jpg
如果你需要更多的澄清评论,我会详细说明。
我会在express文档中添加一些东西,有时在教程或其他地方会被误读。
app.use(mountpoint, middleware)
挂载点是一个虚拟路径,它不在文件系统中(即使它实际存在)。中间件的挂载点是app.js文件夹。
Now
app.use('/static', express.static('public')`
会发送路径为/static/hell/meow/a.js的文件到/public/hell/meow/a.js吗