【问题标题】:Express errorHandler()表达 errorHandler()
【发布时间】:2015-12-15 22:02:36
【问题描述】:

有一个简单的应用程序

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

【问题讨论】:

    标签: node.js express connect


    【解决方案1】:

    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);
      }
    });
    

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

    【讨论】:

    • 我使用 express express@3.3.8 和节点 5 ,也许在这个问题上?
    • @izac 如果您可以使用 Express@4(即如果 Express@3 不是特定要求),我建议您使用它。如果没有,我可以修改我的答案以适应 v3。
    • @robetklep 好的,你可以为 Express 3 修改吗
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-19
    • 2014-04-11
    • 1970-01-01
    • 2023-02-26
    相关资源
    最近更新 更多