对于某些页面,我在我的应用程序中有自定义的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) 据我所知,我正在配置我的全局中间件功能,如文档和关于该主题的每个论坛帖子中所述,但它没有被调用.有谁看到我做错了什么?表达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)