2014-09-13 51 views
0

我在我的应用程序中编写注册表单,用户名和用户的电子邮件必须是唯一的。 我运行一个mysql数据库并使用node-mysql(v 2.0.0)作为驱动程序。正确使用node-mysql处理重复的密钥

当用户试图使用在数据库中已经注册的名称时,MySQL会引发以下错误:Error: ER_DUP_ENTRY: Duplicate entry 'John' for key 'nickname',但在通过节点的MySQL提出的Error对象包含有关错误没有有用的信息:

console.log(JSON.stringify(err)); 

{ “代码”: “ER_DUP_ENTRY”, “错误号”:1062, “SQLSTATE”: “23000”, “指数”:0}

我在哪里可以得到所涉及的条目,关键?我需要知道哪个密钥nickname或密钥email负责重复密钥错误,以便我可以警告用户。

我知道我可以找到这个信息做err.toString()和解析结果(其中包含是mysql错误字符串本身),但我想知道是否有更好的方式来这样做。

+0

你尝试'的console.log(err.message):这种方法是自动JSON.stringify()如果它检测到您在传递其价值存在着一个叫实例。 ;'? – mscdex 2014-09-13 18:35:41

+1

@mscdex:哦,不知道err.message!它怎么不出现在'JSON.stringify(err)'或'for(key in err){...}'中? – user2294139 2014-09-14 19:03:55

回答

1

您看不到message和其他错误属性的原因是,某些“标准”属性未设置为可枚举,因此JSON.stringify()未选取它们。

您可以将toJSON()添加到正确返回序列化所有属性的错误。只是`的console.log(ERR)`或;

var config = { 
    configurable: true, 
    value: function() { 
    var alt = {}; 
    var storeKey = function(key) { 
     alt[key] = this[key]; 
    }; 
    Object.getOwnPropertyNames(this).forEach(storeKey, this); 
    return alt; 
    } 
}; 
Object.defineProperty(Error.prototype, 'toJSON', config);