Использование express.статическое промежуточное ПО в авторизованном маршруте
Я использую узел с 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 ответа на контент расположен в частной зоне.
узел.JS модуль-специфические статические ресурсы
NodeJS не будет обслуживать статические файлы, даже при использовании express.static
перенаправление в статический файл в express.js
Я мог бы поклясться, что у меня это работало раньше, возможно, это было сломано в новой версии чего-то.
- узел версии v0.8.1
- НПМ 1.1.12
- express@2.5.11
- connect@1.9.2
2 ответов
sheesh смотрит на меня все время
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);
});
вы также можете добавить express.static(__dirname + '/private');
в ваше приложение.конфиг.
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
.