同一Mongoose错误为何输出两种不同信息?如何统一提示内容?
我在处理Mongoose连接错误时遇到了问题:
Mongoose原生抛出的错误信息完整清晰:
MongooseServerSelectionError: Could not connect to any servers in your MongoDB Atlas cluster. One common reason is that you're trying to access the database from an IP that isn't whitelisted. Make sure your current IP address is on your Atlas cluster's IP whitelist.
我在
connection.js里用try-catch捕获错误并调用自定义处理函数:
try { await this.$initialConnection; } catch (err) { return await _handleConnectionErrors(err); }
- 自定义错误处理逻辑写在
err.js中:
import chalk from 'chalk'; const name = 'error'; const invoke = async (err) => { console.log(chalk.rgb(255, 255, 255)('[Database error]: ' + ` ` + err)); }; export { invoke, name };
但自定义处理后输出的错误信息变成了简略版本:
MongoServerSelectionError: connection
to 18..249.163:** closed
我想让自定义错误处理函数显示和Mongoose原生捕获的一样的完整错误信息,该怎么做?
问题出在直接拼接err对象时,JavaScript会默认调用err.toString(),返回的是简略错误信息。Mongoose错误对象的完整描述存在err.message属性中,若需要调用栈可使用err.stack。
修改err.js中的invoke函数,直接输出err.message或完整栈信息:
import chalk from 'chalk'; const name = 'error'; const invoke = async (err) => { // 仅显示完整错误描述 console.log(chalk.rgb(255, 255, 255)('[Database error]: ' + err.message)); // 若需要完整调用栈,替换为下方代码 // console.log(chalk.rgb(255, 255, 255)('[Database error]:\n' + err.stack)); }; export { invoke, name };
这样就能输出和Mongoose原生一致的完整错误信息了。
内容的提问来源于stack exchange,提问作者Blackpearl

