2015-05-13 2 views
0

У меня есть базовый сервер ExpressJS, который просто предназначен для регистрации IP-соединения и служит для статических страниц. Что происходит, когда я сам подключаюсь к нему, это то, что промежуточное программное обеспечение, которое регистрирует IP-запрос запроса, повторяется несколько раз. Если я удалю вызов до next(), это остановится, но также предотвратит запуск промежуточного программного обеспечения, управляющего статическими страницами.Промежуточное приложение в приложении ExpressJS использует next() для вызова

код между сервером заключается в следующем:

var express = require('express'); 

    app = express(); 

app.use(function(req, res, next) { 
    console.log('Received a connection from: ' + req.ip) 
    next(); 
}) 

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

var port = 55671; 
app.listen(port, function() { 
    console.log('Listening on: ' + port); 
}); 

Если бы я только подключить один раз, это стандартный вывод:

Listening on: 55671 
Received a connection from: ::ffff:127.0.0.1 
Received a connection from: ::ffff:127.0.0.1 
Received a connection from: ::ffff:127.0.0.1 
Received a connection from: ::ffff:127.0.0.1 
Received a connection from: ::ffff:127.0.0.1 
Received a connection from: ::ffff:127.0.0.1 
Received a connection from: ::ffff:127.0.0.1 
Received a connection from: ::ffff:127.0.0.1 
Received a connection from: ::ffff:127.0.0.1 

Я экспериментировал с различными порядками ППО, и я думал, что это работало ранее, но я могу вспомнить неправильно. Почему следующий() вызов вызывает одно промежуточное ПО несколько раз, прежде чем переходить на другой, а затем останавливаться?

+0

Вы уверены, что это еще не все статическое содержимое? Имейте в виду, что вы регистрируете IP * перед тем, как вы обслуживаете какое-либо статическое содержимое, поэтому вы получите вывод на каждый статический файл. – James

+0

Я обслуживаю довольно много файлов, так что это имеет смысл. Как я могу изменить это только один раз? Должен ли я использовать маршрутизатор, а не промежуточное ПО? – Cavejay

+0

Это зависит от того, что именно вы имеете в виду, это работает как ожидалось, оно регистрирует IP * за запрос *. Вы спрашиваете, возможно ли зарегистрировать IP * на клиента * по первому запросу? – James

ответ

0

Это не следующая(), которая вызывает вещь несколько раз. Это просто позволяет вам двигаться вперед, иначе ваше приложение застряло после первого оператора журнала.

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

Рекомендуется использовать статическое промежуточное программное обеспечение перед записью, если вы не хотите их отслеживать.

Смежные вопросы