使用 express.static() 提供静态资源时,我遇到了一个奇怪的问题。具体来说,参数的dotfiles
对象options
没有产生预期的行为。
在明确的文档中它指出:
...
express.static
基于serve-static,负责服务静态资产...
此外,它声称提供options
参数 toexpress.static()
应该与 serve-static 具有相同的效果:
可选
options
对象可以具有以下属性。
- 用于
option
提供点文件的点文件。可能的值为“allow”、“deny”和“ignore”;默认为“忽略”。
这是 serve-static 文档说明该dotfiles
选项应规定的内容:
'allow' 对点文件没有特殊处理。
'deny' 为任何点文件请求发送 403。
'ignore' 假装 dotfile 不存在并调用 next()。
我能想到的最简洁的例子是下面的代码。似乎 serve-static 提供的资源按预期运行,但是express.static()
在提供相同资源时会忽略选项。也就是说,尽管参数{dotfiles : 'allow'}
被传递给express.static()
,所有以“。”开头的资源请求。返回 404 错误。
这发生在节点版本 v0.10.25,express 版本 2.5.8,在 ubuntu 服务器 14.04.1 LTS 上运行。
var express = require('express');
var app = module.exports = express.createServer();
var finalhandler = require('finalhandler');
var http = require('http');
var serveStatic = require('serve-static');
app.use('/', express.static('public', {
dotfiles : 'allow'
}));
app.listen(3001);
var serve = serveStatic('public', {
dotfiles : 'allow'
});
var server = http.createServer(function(req, res) {
serve(req, res, finalhandler(req, res))
})
server.listen(3002);
我希望 serve-static 和 express.static 的行为完全相同。有什么我想念的吗?或者这是其他人遇到的问题吗?