Промежуточное программное обеспечение, по-видимому, игнорируется сервером - PullRequest
0 голосов
/ 16 июня 2019

В этом примере я сделал промежуточное ПО, которое должно было регистрировать req.path в корне.Эта функция, по-видимому, полностью игнорируется сервером:

var express = require('express');
var path  = require('path');
var app = express();
app.use('/', express.static("./public"));

app.use('/', function(req, res, next){ // the functions
    console.log("req.path = ", req.path); // no console entries on request
    next();
})

app.listen(3000, function () {
  console.log('Example app listening on port 3000!');
});

Я также пытался объединить и express.static(), и функцию вместе в качестве аргументов app.use, но все равно безрезультатно:

var express = require('express');
var path  = require('path');
var app = express();
app.use('/', 
express.static("./public"),
function(req, res, next){
    console.log("req.path = ", req.path);
    next();
});

function foo(req, res, next){
    console.log(req.path);
    next();
}

app.listen(3000, function () {
  console.log('Example app listening on port 3000!');
});

Что я не понимаю?

РЕДАКТИРОВАТЬ: если я поставлю свое промежуточное программное обеспечение до express.static, он будет работать как задумано.В чем проблема?

1 Ответ

1 голос
/ 17 июня 2019

Когда вы используете

app.use('/', express.static("./public"));

Есть две вещи, которые происходят.

1) .use в основном используется для добавления промежуточного программного обеспечения ко всем запросам, соответствующим пути.Или, если путь не указан, он будет использоваться для ВСЕХ маршрутов.
FYI: запрос проходит через все промежуточное программное обеспечение в соответствии с позицией их объявления.Например:

app.use(mid1);
app.use(mid2);

означает, что запрос будет проходить через mid1 , затем mid2 , затем маршрут , обработчик .

2) Путем .use ing static с / означает, что каждый маршрут /* будет проходить через промежуточное ПО express.static и попытаться найти файл в папке public.Если он не найден, вы получите 404 и не перейдете к следующему промежуточному программному обеспечению.Если он найден, он направит файл, используя stream.pipe(res)

Итак, используя express.static после вашего промежуточного ПО, вы говорите: сначала пройдите мое промежуточное ПО, затем найдите в папке ./public.

Что вы можете сделать, так это запустить промежуточное программное обеспечение и использовать определенный маршрут для статического промежуточного программного обеспечения.

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