2015-12-14 73 views
1

有一個簡單的應用程序快遞的ErrorHandler()

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

var log = require('libs/log.js')(module); 


var app = express(); 
app.set("port",config.port); 

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

app.use(function(req,res,next){ 
    if(req.url=='/dn'){ 
     next(new Error('lol')); 

    }else next(); 
}); 

app.use(function(err,req,res,next){ 
    if(app.get('env')=='development'){ 
     var errorHandler = app.use(express.errorHandler()); 
     errorHandler(err,req,res,next); 
    }else{ 
     res.end(401); 
    } 
}); 

,但有一個頁面錯誤這樣 screen

我做錯了什麼?在快速文檔中我找不到像我這樣的例子。

UPD:使用表達3.3.8和節點5.2.0 JS 3.5.2故宮

回答

0

express.errorHandler在Express 4的已被廢棄,現在有一個單獨的包叫做errorhandler,你應該使用。此外,send.end()不能用於發送狀態碼,您必須使用sendStatus()status(...).end()

所以,你的代碼會變得這樣的事情:

var errorhandler = require('errorhandler')(); 

... 

app.use(function(err, req, res, next) { 
    if (app.get('env') === 'development') { 
    return errorhandler(err, req, res, next); 
    } else { 
    res.sendStatus(401); 
    } 
}); 

對於快遞3,代碼應該是這樣的:

var errorHandler = express.errorHandler(); 

... 

app.use(function(err, req, res, next) { 
    if (app.get('env') === 'development') { 
    return errorHandler(err, req, res, next); 
    } else { 
    res.send(401); 
    } 
}); 
+0

我用快遞[email protected]和節點5,也許在這個問題? – izac

+0

@izac如果您可以使用Express @ 4(即如果Express @ 3不是特定要求),我會建議使用它。如果沒有,我可以修改我的答案以適應v3。 – robertklep

+0

@robetklep好的,你可以修改Express 3 – izac