当MSNodeSQL查询失败时,我对回调参数感到困惑。我是JavaScript的新手,所以这可能是一个简单的JavaScript问题。对数据库的简化查询是:
conn.query(storedProc, params, function( err, result ) {
if (err) {
console.log("err = " + err);
console.log("err = " + JSON.stringify(err));
}
});
我重命名了一个存储过程,因此无法找到它并且会强制发生错误。错误参数显示错误的有意义描述:
err = Error: [Microsoft][SQL Server Native Client 11.0][SQL Server]Could not find stored procedure 'dbo.me3_MsgQueueIn_AddMessage'.
当我将此变量发送回客户端并在浏览器中显示它时,它显示为JSON对象,我现在看到当我在服务器上显示它时如上所示,它是一个JSON对象,我看到
err = {"sqlstate":"42000","code":2812}
虽然拥有这样的特定错误代码很好,但对错误进行有意义的描述也很好。
任何人都可以解释err显然有两个值,一个字符串和一个JSON对象?
其次,如何在客户端的浏览器中看到有意义的描述,因为目前我只看到带有两个字段的JSON对象。
答案 0 :(得分:0)
您看到的是mysql包使用的自定义错误。 Error对象不像其他对象那样完全是JSON对象。 错误中包含的内容不是JSON.stringify
以此代码为例:
function CustomError( msg ){
var err = Error.call( this, msg );
err.customField = "abc";
return err;
}
var err = new Error("Bad thing");
console.log("err = " + err);
console.log("err = " + JSON.stringify(err));
var customErr = new CustomError("Custom Bad thing");
console.log("customErr = " + customErr );
console.log("customErr = " + JSON.stringify(customErr) );
这给出了这样的输出:
err = Error: Bad thing
err = {}
customErr = Error: Custom Bad thing
customErr = {"customField":"abc"}
如您所见,自定义错误仅显示为其定义的字段,即您看到返回给客户端的JSON对象。
错误也很有趣!
name
是错误的类型。尝试将err.name = "CustomError";
添加到自定义错误定义中。它会将输出更改为" customErr = CustomError :自定义错误" (强调我的)。
想要在您的客户端上看到该错误消息?试试err.message
,这就是名字后的所有内容。这是在创建错误时使用的字符串。
一个有趣的是stack
属性,它打印出错误的堆栈跟踪。请勿将此信息发送给您的客户:)如果错误被抛出而未被捕获,您也会看到它。尝试throw customErr;
(虽然注意会停止节点过程)。