表达 errorHandler()

Express 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

我做错了什么?在 Express 文档中,我找不到像我这样的示例。

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

express.errorHandler 在 Express 4 中被弃用,现在有一个名为 errorhandler that you should use instead. Also, send.end() cannot be used to just send a status code, you have to use sendStatus() or 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);
  }
});