2013-07-17 14 views
9

필자는 전 세계적인 미들웨어 기능을 문서 및 모든 주제에 대한 포럼 게시판에 설명 된대로 구성한다고 말할 수 있지만 호출되지는 않습니다. 내가 뭘 잘못하고 있는지 누가 알 겠어? 3.2.5를 표현한다. 다음 "경로 안에"익스프레스 글로벌 미들웨어가 호출되지 않음

Express server listening on port 9000 
inside route 
GET/200 7ms - 2b 

나는 "미들웨어 내부에"볼 것으로 예상 : 로그 출력에서 ​​나는 다음을 참조하십시오. 대신, 나는 단지 "내부 경로"를 본다.

코드 :

var express = require('express'), http=require('http'), path=require('path'); 

var app = express(); 

app.enable('trust proxy'); 

app.set('port', process.env.PORT || 9000); 
app.set('views', __dirname + '/views'); 
app.set('view engine', 'ejs'); 
app.set('layout', 'layout'); 

app.use(require('express-ejs-layouts')); 
app.use(express.favicon(__dirname + '/public/images/favicon.ico')); 
app.use(express.logger('dev')); 
app.use(express.bodyParser()); 
app.use(express.methodOverride()) 
app.use(express.cookieParser('kfiwknks')); 
app.use(express.session()); 
app.use(app.router); 
app.use(express.static(path.join(__dirname, 'public'))); 

if ('development' == app.get('env')) { 
    app.use(express.errorHandler()); 
} else { 
    app.use(function(err, req, res, next){ 
    console.error (error); 
    res.send (500, "Internal server error"); 
    }); 
} 

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

app.get ("/", function (req, res) { 
    console.log ("inside route"); 
    res.send(200); 
}); 

http.createServer(app).listen(app.get('port'), function() { 
    console.log('Express server listening on port ' + app.get('port')); 
}); 

이 관련 포스트 :

Express 3 error middleware not being called

미들웨어 에러 처리 다릅니다. 내 것은 바닐라 미들웨어입니다.

+0

당신은'require ("path")' –

+0

이 필요하다. 작업 예제에서 감사 패스가 필요하다. 게시물에 손으로 요구 문을 추가했습니다 (그리고 지금은 게시물에 추가 된 경로). 경로가 필요하지 않은 경우 코드가 간단히 폭파됩니다. – Jake

+4

app.router를 사용하기 전에 미들웨어를 넣으십시오. – user568109

답변

21

app.router을 사용하기 전에 미들웨어를 넣어야합니다.

... 
app.use (function (req, res, next) { 
    console.log ("inside middleware"); 
    next(); 
}); 
... 
app.use(app.router); 
+0

대단히 고마워요. app.router는 경로를 정의하기 전에 추가 된 마지막 전역 미들웨어 여야합니다. – Jake

+0

멋진! 그건 나에게 너무 도움이 .. – progrrammer

+0

고마워! 그것은 나를 도왔다. –

7

Express 4 사용자 from the Express 4 docs에 대한 답변이 업데이트되었습니다. 아래의 문서를 참조하십시오. app.router은 더 이상 사용되지 않으며 더 이상 사용되지 않습니다.

이 : 나는 또한 명확 주문하기 위해 더미 경로를 추가 "당신은, 마지막으로 오류 처리 미들웨어를 정의 호출 다른 app.use() 및 경로 후, 예를 들어를 :

var bodyParser = require('body-parser'); 

app.use(bodyParser()); 
app.get('/', function(req, res) { 
    res.send('hello world'); 
}) 
app.use(function(err, req, res, next) { 
    // logic 
}); 

"

관련 문제