快递.js下一个(错误)不起作用



这是我的代码

mysql = require('mysql');
con = mysql.createConnection(connectionSetttings);
app.get('/users/list', ensureLogin, function (req, res, next) {
    con.query(query.getUserList, [req.user.innId], function (err, rows) {
        if (err) {
            next(err);  // also tried: return next(err)
        } else {
            displayUsers();
        }
    });
}, function (err) {
    console.error(err);
    displayErrorPage(500);
});

我在MySQL服务器未运行的情况下运行它,以查看Express是否会呈现错误页面。问题是,Express只是将堆栈添加到浏览器中。我的代码有什么问题吗?如何正确链接中间件?

以与其他中间件函数相同的方式定义错误处理中间件函数,不同之处在于错误处理函数有四个参数而不是三个参数:(err, req, res, next(。

确保将错误处理添加到应用after路由。

var app = require('express')();
app.get('/users/list', ensureLogin, function (req, res, next) {
  con.query(query.getUserList, [req.user.innId], function (err, rows) {
    if (err) {
      next(err);
    } else {
      displayUsers();
    }
  });
});
// Error handling middleware
app.use(function (err, req, res, next) {
  displayErrorPage(500);
});
当使用

MySQL 作为会话存储时,使用 app.use() 附加的与会话相关的中间件将拦截所有路由和故障的请求。这将使看似无关的路由抛出HTTP500,即使它们看起来不像是调用return next(err)

解决方案是仅将任何与会话相关的中间件附加到必要的路由。或者,您可以将它们包装在如下所示的过滤器函数中:

var middlewareFilter = function(middleware) {
    // Return whatever function that is returned by this function
    // to be used in app.use()
    return function (req, res, next) {
        // Set the routes to be ignored.
        var exceptionList = [
            'images',
            'stylesheets',
            'scripts'
        ];
        // Cast req.url to string so it can use JS's string methods
        var path = String(req.url);
        // If path matches any of the exceptionList...
        if (array.contains(path.split('/')[1], exceptionList)) {
            // ...just do nothing
            return next();
        } else {
            // Otherwise, return the middleware
            return middleware(req, res, next);
        }
    }
}

并像app.use(session(sessionConfig));一样使用它们

相关内容

  • 没有找到相关文章

最新更新