在Next.js热重新加载之前是否有钩子?

在Next.js热重新加载之前是否有钩子?,next.js,Next.js,每次应用程序热重新加载时,它都会使用node-mysql2创建一个新的数据库连接池,以重用数据库连接。但是,当应用程序热重新加载时,将创建一个新池。随着时间的推移,这会导致RDBMS达到其最大连接数(~300)。在热重新加载放弃应用程序实例之前,如何使用钩子或其他技术关闭连接池 这在API部分,因此前端上下文提供程序无法提供帮助 event - build page: /api/order/listForUser wait - compiling... event - compiled suc

每次应用程序热重新加载时,它都会使用
node-mysql2
创建一个新的数据库连接池,以重用数据库连接。但是,当应用程序热重新加载时,将创建一个新池。随着时间的推移,这会导致RDBMS达到其最大连接数(~300)。在热重新加载放弃应用程序实例之前,如何使用钩子或其他技术关闭连接池

这在API部分,因此前端上下文提供程序无法提供帮助

event - build page: /api/order/listForUser
wait  - compiling...
event - compiled successfully
Connection pool was falsey. Created a new connection pool.
Released connection.
Released connection.
event - build page: /order/[orderId]
wait  - compiling...
event - compiled successfully
event - build page: /api/order/details
wait  - compiling...
event - compiled successfully
Connection pool was falsey. Created a new connection pool.
Released connection.
Released connection.

如您所见,每次构建API“页面”时,都会创建一个新的连接池。这是有道理的,因为代码是新的,但是有没有办法在事件发生之前清理我的连接池?

这是一个已知的nextjs问题,只在开发过程中发生。您可以尝试创建一个全局变量来保存连接。(但是,即使使用global.variable,这也不能100%起作用)

psuedo代码示例

  let connection

    module.exports = () => {
      
          if (!connection) {
                connection = mysqlconnection(connection string)
                return connection
          } else {
                return connection
          }

          

    }

我现在就是这么做的。。它可以工作0%您可以使用
global.connection
而不是
connection
,尽管我可以告诉您,无论您是在开发中还是在Vercel(无服务器功能)上部署它,这都是一个问题。我结束了使用nextJS作为前端和静态生成,但对我的所有api路由使用单独的expressJS应用程序。它更干净,重量更轻,避免了所有这些不必要的问题。在过去的3年里,我已经使用Nextjs进行了10多个项目,所以我对它非常了解。
global.connection
确实有效,即使在重新加载页面之间也是如此。非常感谢。