MSNodeSQL查询错误结果或对JavaScript变量的误解

时间:2014-05-06 12:21:34

标签: javascript sql-server json node.js

当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对象。

1 个答案:

答案 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;(虽然注意会停止节点过程)。