【发布时间】:2012-01-07 01:05:51
【问题描述】:
我有一个简单的 Express 服务器,它提供一些静态文件。这是服务器:
var express = require('express');
var app = express.createServer();
// Configuration
app.configure(function() {
app.use(express.bodyParser());
app.use(express.staticCache());
app.use(express.static(__dirname + '/public'));
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
// 404
app.get('*', function(req, res) {
res.send('not found', 404);
});
app.listen(3000);
在我的公共目录中,我有一个名为index.html 的文件。启动node app.js 然后浏览到localhost:3000/index.html 会按预期显示静态文件。导航到localhost:3000/ind 或localhost:3000/ind\ 会按预期显示404 页面。
但是,导航到localhost:3000/index.html\(注意尾部反斜杠)会使我的node 服务器崩溃:
stream.js:105
throw er; // Unhandled stream error in pipe.
^
Error: ENOENT, no such file or directory '/home/bill/projects/app/public/index.html\'
为什么node 服务器崩溃而不是仅仅提供404 页面?我认为由于该文件不存在,静态中间件会跳过它并将请求传递给路由。我通过创建一个自定义中间件来解决它,如果请求 URL 中存在尾部反斜杠,则返回 404,但我想弄清楚我是否在这里遗漏了一些东西。谢谢!
【问题讨论】: