2014-06-23 2 views
1

HTTP 요청의 오류를 처리하는 방법은 무엇입니까?http 요청에서 express.js 오류 처리

다음은 전체 오류 어떻게 로그에 오류를 작성하고 클라이언트에 Fatal error을 반환 .. 클라이언트에 반환됩니다?

익스프레스 v4.4.4

var express = require('express'), 
    app = express(), 
    domain = require('domain'), 
    port = 3000; 

app.use(function(err, req, res, next){ 
    console.error(err.stack); 
    res.send('Fatal error!', 500); 
}); 

app.get('/', function(req, res){ 
    var d = domain.create(); 
    d.on('error', function(err){ 
     console.error('Error', err); 

     res.send('Fatal error!', 500); 
    }); 
    d.add(req); 
    d.add(res); 
    d.run(function(){ 
     // a is undefined 
     a.ddd(); 

     res.send('Success!'); 
    }); 
}) 
.listen(port, function(){ 
    console.log('Express server listening on port '+port); 
}); 
+0

http://expressjs.com/guide.html#error-handling –

+0

업데이트 한 대신 오류 메시지를 반환하는 다음 (오류)를 호출 Stack to the client – clarkk

+0

친구 - 'app.use'가 그 예입니다. –

답변

3

오류 처리기의 .use는 오류를 일으킬 수있는 route/handlers/middlewhare 뒤에 맨 아래에 있어야합니다. 그런 다음 다른 장소에서, 여전히 오류를 보내 .. 내 질문에 직접

// this comes first 
app.get('/', function(req, res, next){ // note the addition of next 
    var d = domain.create(); 
    d.on('error', function(err){ 
     next(err); // pass the error on to the next middleware 
    }); 
    // ... 
}); 

// this comes last 
app.use(function(err, req, res, next){ 
    console.error(err.stack); 
    res.send('Fatal error!', 500); 
}); 
0

오류 처리 그냥 평범한 미들웨어 다음과 같이 정의된다 미들웨어, 그러나 4의 인수에 대응하여 정의해야합니다, 즉 서명입니다 (ERR, REQ, 다음 고해상도) :

Express Error Handling

예를 들어 코드 :

app.use(function(err, req, res, next){ 
    console.error(err.stack); 
    res.send(500, 'Something broke!'); 
});