在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
确实有效,即使在重新加载页面之间也是如此。非常感谢。