如何处理MySQLStore连接错误?

如何处理MySQLStore连接错误?,mysql,node.js,express,session,session-store,Mysql,Node.js,Express,Session,Session Store,我正在使用NodeJS和express。我正在将会话存储到MySQLStore(express mysql会话) 我的问题是如何处理连接错误?当它无法连接时,我希望向用户呈现一个页面,而不是“错误:在TCPConnectWrap.afterConnect[as oncomplete](节点:net:1137:16)…”消息 我的代码: const MySQLStore = require('express-mysql-session')(session); (....) app.use(sess

我正在使用NodeJS和express。我正在将会话存储到MySQLStore(express mysql会话) 我的问题是如何处理连接错误?当它无法连接时,我希望向用户呈现一个页面,而不是“错误:在TCPConnectWrap.afterConnect[as oncomplete](节点:net:1137:16)…”消息

我的代码:

const MySQLStore = require('express-mysql-session')(session);
(....)
app.use(session({
  secret: 'something',
  resave: false,
  saveUninitialized: false,
  store: new MySQLStore({
    host: something,
    user: something,
    password: something,
    database: something
  }),
  cookie: {
    maxAge: 7 * 24 * 60 * 60 * 1000
  }
}));

使用简单的mysqljs,我可以很容易地做到这一点,因为当我使用connection.query时,有一个(error,result)=>{…}我可以处理错误,但在这个MySQLStore中,我不知道如何处理连接错误。

您可以使用现有的MySQL连接或池,如文档中所述


解决了这个问题,Express错误处理程序中间件也可以捕获这个错误。 只需在app.listen之前将其粘贴到应用程序的末尾

app.use((error, req, res, next) => {
  res.status(error.status || 500).render('error', { 
    msg: 'Please check back later!'
  });
});

请注意,下一个参数是必需的,即使我们不使用它,因为错误处理函数在express中有四个参数。如果你删除它,它将不起作用。

我实际上是用现有连接池的方式使用它的,我只是不想粘贴我的整个应用程序,所以我举了一个例子。此解决方案仅在应用程序启动时捕获错误,而不是在应用程序启动后捕获错误。假设您启动了应用程序,然后在一段时间后,您的数据库变得无法访问,您将在TCPConnectWrap处收到错误:connect econnrefered127.0.0.1:3306。afterConnect。。。正在访问应用的消息。在这种情况下,每次查询数据库时都需要使用try/catch。您可以使用处理这些错误的中间件,然后向用户发送错误页面。我想你需要修改你的问题。实际上,我也会尽我所能去做。这个错误是由以下内容引起的:“newmysqlstore({}/*会话存储选项*/,连接);”其中我无法执行try-catch。希望你现在能理解我的问题。
app.use((error, req, res, next) => {
  res.status(error.status || 500).render('error', { 
    msg: 'Please check back later!'
  });
});