node.js и экспресс: можно ли перейти с маршрута обратно на промежуточное ПО (статическое)? - PullRequest
1 голос
/ 14 октября 2011

При написании моего node.js с экспресс-сервером я хотел бы сначала запустить промежуточное ПО маршрута перед статическим промежуточным ПО (хочу иметь полный контроль над req / res до обслуживания статического содержимого).Теперь я также использую сопоставление маршрутов в конце * для простого возврата с 404. Очевидно, что, поскольку у меня нет маршрутов для статического содержимого, мне нужно добавить маршруты для моей статической (публичной) папки.При этом я хотел бы передать управление изнутри маршрута к статическому промежуточному программному обеспечению и тем самым пропустить мой маршрут 404.Это возможно?Я прочитал, что могу вызвать next ("route"), но это дает мне тот же результат, что и вызов next ().

Спасибо

Ответы [ 2 ]

3 голосов
/ 24 октября 2011

Вам не нужно явно добавлять маршрут *.Express сделает за вас 404.

Все, что вам нужно сделать, - это указать, чтобы Express запустил пользовательские маршруты перед статическим промежуточным ПО.Вы делаете это так:

app.use(app.router);
app.use(express.static(__dirname + '/public');
0 голосов
/ 14 октября 2011

Я не уверен, поможет ли это, но если вы хотите выборочно войти или запретить загрузку статического файла, вы можете сделать это:

Сначала убедитесь, что маршрутизация выполняется до статического промежуточного программного обеспечения:

app.configure(function(){
...
    app.use(app.router); // this one goes first
    app.use(express.static(__dirname + '/public'));
...

Во-вторых, зарегистрируйте маршрут, который перехватывает все запросы и просто отвечает условно. В следующем примере обнаруживается и регистрируется сообщение, когда файл-A.txt (путь к файловой системе - /public/file-A.txt) будет загружен, любой другой запрос файла будет загружен без прерывания:

app.get('/*', function(req, res, next){
    if(req.params[0] === 'file-A.txt') { // you can also use req.uri === '/file-A.txt'
        // Yay this is the File A... 
        console.warn("The static file A has been requested")
        // but we still let it download
        next()
    } else {
        // we don't care about any other file, let it download too
        next()
    }
});

Вот и все, надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...