如何在Nuxt3中实现服务器关机时优雅断开数据库连接?
在Nuxt3中实现服务器关机时断开数据库连接的方案
Nuxt3底层基于Nitro运行时,原有Nuxt2的钩子逻辑不再适用,需要通过Nitro的生命周期钩子来实现服务器关闭时的数据库断开操作,具体步骤如下:
- 在项目根目录创建
server/plugins/close-db.ts文件,编写Nitro插件监听关闭事件:
export default defineNitroPlugin((nitroApp) => { // 监听Nitro服务器关闭钩子 nitroApp.hooks.hook('close', async () => { // 执行数据库断开逻辑 // 示例:如果使用Prisma,就是 await prisma.$disconnect() console.log('服务器关闭,已断开数据库连接'); }); // 兜底监听系统SIGINT信号(Ctrl+C触发) process.on('SIGINT', async () => { // 重复执行数据库断开逻辑 // await prisma.$disconnect() console.log('捕获终止信号,已断开数据库连接'); process.exit(0); }); });
- 原理说明:Nuxt3的
nuxt.config.ts中的钩子仅针对应用初始化阶段,服务器层面的关闭事件需要通过Nitro插件处理,Nitro的close钩子会在服务器正常关闭时触发;同时监听SIGINT信号可以覆盖手动按Ctrl+C终止进程的场景,确保数据库连接能被正确断开。
内容的提问来源于stack exchange,提问作者Victor
相关产品推荐
相关产品推荐

