13

我正在使用带有 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 模块特定的静态资源

NodeJS 不会提供静态文件,即使使用 express.static

重定向到 express.js 中的静态文件

我可以发誓我以前有这个工作,也许它在某个新版本中被破坏了。

  • 节点 v0.8.1
  • npm 1.1.12
  • 快递@2.5.11
  • 连接@1.9.2
4

2 回答 2

17

哎呀一直盯着我看

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);
});

编辑 2014 年 11 月 29 日

因此,在有人发布了这个问题后,我回到了这个答案,发现即使我提到了 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);
});
于 2012-07-13T15:28:46.253 回答
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.

于 2014-11-07T19:47:34.213 回答