2016-07-01 1 views
1

Мой код:Странная выполнить результат экспресс промежуточного

var http = require("http"); 
var express = require("express"); 
var app = express(); 

app.set('port',3332); 

app.get('/',function(req,res,next){ 
    res.send('OK'); 
    next(); 
}); 

app.use(function(req,res,next){ 
    console.log('middleware 1'); 
    next(); 
}); 

app.use(function(req,res,next){ 
    console.log('middleware 2'); 
}); 

http.createServer(app).listen(app.set('port'),function(){ 
    console.log('nodejs start listen 3332 port!'); 
}); 

nodejs вывод сервера: nodejs начать слушать 3332 порт!

промежуточного слоя 1

промежуточного слоя 2

промежуточного слоя 1

промежуточного слоя 2

Почему каждый промежуточного обжигают в 2 раза, может кто-нибудь помочь мне объяснить. Я знаю, если убрать next() в app.get(), он будет уволен 1 раз. Является ли цепочка промежуточного слоя круглой цепью? Спасибо.

Изменить код, добавить next() в последних app.use(). Существует еще один вопрос:

var http = require("http"); 

var express = require("express"); 
var app = express(); 

app.set('port',3332); 

app.get('/',function(req,res,next){ 
    res.send('OK'); 
    next(); 
}); 

app.use(function(req,res,next){ 
    console.log('middleware 1'); 
    next(); 
}); 

app.use(function(req,res,next){ 
    console.log('middleware 2'); 
    next(); // new add 
}); 

http.createServer(app).listen(app.set('port'),function(){ 
    console.log('nodejs start listen 3332 port!'); 
}); 

Middelware зарегистрирована на app.use() вызывается, когда я получить доступ к URL, в первый раз. Но второй раз, в третий раз доступ к URL-адресу как в браузере, так и в командной строке cmd, он не будет вызываться. Почему?

+0

Я думаю, это потому, что вы используете функцию next() в app.get и app.use, где app.use всегда звонит, когда вы пытаетесь вызвать app.get –

+0

Я протестировал, если я удалю следующий () в app.get(), то он не будет вызывать функцию обратного вызова, которая зарегистрирована в app.use(). Вы проверяете это? – profangong

+0

Я не использую next() в get(). Мы используем return в get(). –

ответ

3

Это favicon.ico запрос. Браузер пытается загрузить значки каждый раз, когда вы запрашиваете страницу индекса сайта. Введите URL-адрес, чтобы увидеть его в консоли. Используйте curl/wget для запуска запросов.

+0

Я обновил свой узел до последней версии, это нормально при использовании curl для вызова url. Спасибо. И у меня также есть вопрос, если я добавлю следующий() в последний app.use() в свой код, а затем промежуточное программное обеспечение app.use вызывается только при использовании завитка для первого доступа к URL-адресу. Но второй раз, в третий раз ... промежуточное программное обеспечение, зарегистрированное приложением app.use, не называется. Почему так? – profangong

+0

Я не уверен, что понимаю, что вы на самом деле имеете в виду. Так что трудно сказать, не просматривая код. –

+0

Вы можете запустить мой последний код блока. На моем компьютере, после загрузки кода, войдите в url: localhost: 3332, со стороны сервера, он выведет 2 строки журнала. Но при повторном обновлении веб-страницы он не выводит никаких журналов. Я думаю, что он должен выводить один и тот же журнал с двумя строками, но это не так. – profangong

0

Я обновляю свои узлы, это нормально при использовании браузера. Поэтому я думаю, что проблема связана с низкой версией nodejs. Всем спасибо.

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