表达errorHandler()

时间:2015-12-14 19:19:37

标签: node.js express connect

有一个简单的应用

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

我做错了什么?在Express doc中我找不到像我这样的例子。

UPD:使用express 3.3.8和node js 5.2.0 npm 3.5.2

1 个答案:

答案 0 :(得分:1)

在Express 4中不推荐使用

express.errorHandler,现在我们应该使用一个名为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);
  }
});

对于Express 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);
  }
});