NodeJS Express模块​​:'dotfile'选项无效

时间:2015-01-30 05:52:19

标签: node.js express middleware dotfiles

使用express.static()来提供静态资源时,我遇到了一个奇怪的问题。具体而言,dotfiles参数的options对象不会产生预期的行为。

在快递文件中声明:

  

... express.static基于serve-static,负责提供静态资产......

此外,它声称向options提供express.static()参数应与serve-static具有相同的效果:

  

可选的options对象可以具有以下属性。

     
      
  • dotfiles option用于提供dotfiles。可能的值是“允许”,“拒绝”和“忽略”;默认为“忽略”。
  •   

这是serve-static文档声明dotfiles选项应该指示的内容:

  
      
  • 'allow'对dotfiles没有特殊处理。

  •   
  • '拒绝'为任何点文件请求发送403。

  •   
  • '忽略'假装像dotfile不存在并调用next()。

  •   

我能提出的最简洁的例子是下面的代码。似乎serve-static服务的资源按预期运行,但是express.static()在提供相同资源时忽略了这些选项。也就是说,尽管参数{dotfiles : 'allow'}被传递给express.static(),但所有资源请求都以'。'开头。返回404错误。

这发生在节点版本v0.10.25,express version 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的行为完全相同。有什么我想念的吗?或者这是其他人遇到的问题?

1 个答案:

答案 0 :(得分:1)

您使用的是Express 2.5.8,您正在查看的文档可能是4.x2.5.8没有dotfiles选项,因为它使用不支持它的连接1.x。您的两个选项是:

  1. 像你在你的例子中那样拉入serve-static
  2. 升级您的express版本。 2.5.8很快就要接近3岁了。