1

使用 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 的行为完全相同。有什么我想念的吗?或者这是其他人遇到的问题吗?

4

1 回答 1

1

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

  1. serve-static像你在你的例子中所做的那样拉进来。
  2. 升级你的express版本。2.5.8很快就接近3岁了。
于 2015-01-30T06:56:03.887 回答