我正在使用带有express和passportjs的节点来限制对位于私人文件夹中的文件的访问。我已将代码缩减为以下内容。 公共静态文件夹中的所有内容都运行良好,但通过使用staticMiddleware路由目标私有文件夹会返回404错误。
var express = require('express')
, util = require('util');
var app = express.createServer();
var staticMiddleware = express.static(__dirname + '/private');
app.configure(function() {
app.use(app.router);
app.use(express.logger('dev'));
app.use('/public',express.static(__dirname + '/public'));
});
app.get('/private/:file', function(req, res, next){
console.log('about to send restricted file '+ req.params.file);
staticMiddleware(req, res, next);
});
app.listen(16000);
我使用的是以下似乎适用于其他人的参考资料,所以我必须遗漏一些东西。 对于我来说,仅对私人区域内容的404响应显示不起作用。
Node.js module-specific static resources
NodeJS won't serve static files, even when using express.static
Redirecting to a static file in express.js
我本来可以发誓我之前有过这种工作,也许它在一个新版本的东西中被破坏了。
答案 0 :(得分:16)
app.get('/private/:file', function(req, res, next){
console.log('about to send restricted file '+ req.params.file);
req.url = req.url.replace(/^\/private/, '')
staticMiddleware(req, res, next);
});
编辑11-29-2014
所以在有人发布问题之后,我回到这个答案,发现虽然我提到了passportjs,但我从未说明我最终是如何使用这个功能的。
var staticMiddlewarePrivate = express['static'](__dirname + '/private');
app.get('/private/*/:file', auth.ensureAuthenticated, function(req, res, next){
console.log('**** Private ****');
req.url = req.url.replace(/^\/private/, '');
staticMiddlewarePrivate(req, res, next);
});
答案 1 :(得分:0)
您还可以将express.static(__dirname + '/private');
添加到您的app.config。
app.configure(function() {
app.use(app.router);
app.use(express.logger('dev'));
app.use('/public',express.static(__dirname + '/public'));
app.use('/private',express.static(__dirname + '/private'));
});
private
路径中间件将在路径以private
开始的任何时候执行。