相关疑难解决方法(0)

Express 4中间件错误处理程序未被调用

对于某些页面,我在我的应用程序中有自定义的500,404和403错误处理.因此,例如在数据库查询失败后,我会去:

return next({status: 404, message: 'Record not found'});
Run Code Online (Sandbox Code Playgroud)

要么

return next(new Error('Bad things have happened')});
Run Code Online (Sandbox Code Playgroud)

在我的中间件中,我有一个错误处理程序:

app.use(function (err, req, res, next) {
    // handle error
});
Run Code Online (Sandbox Code Playgroud)

问题是永远不会调用错误处理程序,而是将错误调用堆栈打印到浏览器中.我希望处理程序呈现自定义错误页面.

app.js

var express = require('express')
    , app = express()
    , swig = require('swig')
    , config = require('./lib/config')
    , env = process.env.NODE_ENV || 'development'
    , path = require('path');

config.configure(env);

app.engine('html', swig.renderFile);
app.set('view cache', false);

swig.setDefaults({
    cache: config.get('swigCache')
});

app.set('view engine', 'html');
app.set('views', __dirname + '/lib/views');

require('./lib/util/swig');
require('./lib/initialisers/mongodb')();
require('./lib/initialisers/aws')();
require('./lib/middleware')(app); // first load middleware
require('./lib/routes')(app); …
Run Code Online (Sandbox Code Playgroud)

middleware node.js express

22
推荐指数
6
解决办法
9201
查看次数

表达未被调用的全局中间件

据我所知,我正在配置我的全局中间件功能,如文档和关于该主题的每个论坛帖子中所述,但它没有被调用.有谁看到我做错了什么?表达3.2.5.在日志输出中,我看到以下内容:

Express server listening on port 9000
inside route
GET / 200 7ms - 2b
Run Code Online (Sandbox Code Playgroud)

我希望看到"内部中间件",然后"内部路由".相反,我只看到"内部路线".

代码:

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

var app = express();

app.enable('trust proxy');

app.set('port', process.env.PORT || 9000);
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.set('layout', 'layout');

app.use(require('express-ejs-layouts'));
app.use(express.favicon(__dirname + '/public/images/favicon.ico')); 
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride())
app.use(express.cookieParser('kfiwknks'));
app.use(express.session());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));

if ('development' == app.get('env')) {
  app.use(express.errorHandler());
} else {
  app.use(function(err, req, res, next){
    console.error (error);
    res.send (500, "Internal server error");
  });
}

app.use (function (req, res, …
Run Code Online (Sandbox Code Playgroud)

middleware node.js express

17
推荐指数
2
解决办法
1万
查看次数

标签 统计

express ×2

middleware ×2

node.js ×2