如何处理MongoParseError避免Node.js应用运行时立即退出?
解决方案
new MongoClient()在传入无效uri时会同步抛出错误,原代码将实例化逻辑写在try/catch外部,导致错误无法被捕获,直接触发程序崩溃。- 你尝试的写法中
client变量是在try块内部声明的块级作用域变量,块外部无法访问,因此会出现变量不存在的报错。
正确实现代码
const { MongoClient } = require("mongodb"); const config = require("../config"); const uri = config.dbAdress; // 先在外层声明client变量,保证全局作用域可访问 let client = null; // 包裹同步实例化逻辑,捕获MongoParseError try { client = new MongoClient(uri); } catch (e) { console.error("数据库连接串配置无效:", e.message); // 固定等待5秒后退出,适配pkg打包的窗口场景 setTimeout(() => process.exit(1), 5000); } const foo = async () => { // 先判断client是否初始化成功,避免空值报错 if (!client) return; try { await client.connect(); // 此处写后续业务逻辑 } catch(e) { console.error("数据库连接失败:", e); } finally { await client.close(); } }
可选优化:等待用户按键再退出
如果不想固定等待5秒,可以改成用户按任意键后再关闭窗口,使用体验更灵活:
// 替换实例化错误捕获块的内容即可 catch (e) { console.error("数据库连接串配置无效:", e.message); console.log("按任意键退出程序..."); // 监听标准输入,收到用户输入后再退出 process.stdin.setRawMode(true); process.stdin.resume(); process.stdin.on('data', () => process.exit(1)); }
注意:如果你的程序还有其他初始化逻辑,要确保只有client初始化成功后才执行后续流程,避免空值调用报错。
内容的提问来源于stack exchange,提问作者Nundex
相关产品推荐
相关产品推荐

