2015-12-14 41 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