2013-12-15 9 views

Odpowiedz

6

Od MongoDB 2.4.8 z kierowcą mongodb 1.3.23, wyglądają tak:

{ 
    "name":"MongoError", 
    "err":"E11000 duplicate key error index: test.test.$country_1 dup key: { : \"XYZ\" }", 
    "code":11000, 
    "n":0, 
    "connectionId":10706, 
    "ok":1 
} 
+0

Doskonale, dziękuję! – qJake

2

MongoError obiektów

z nowszymi wersjami (np 2.2) rzeczy są trochę node-mongodb-driver nieco inaczej.

Wewnątrz nodejs driver source code widać, że właściwości obiektu błędu mogą być różne (patrz wiersz 34). Tylko pola nazw i wiadomości są zawsze dostępne.

Tutaj wklejam interesujący fragment kodu, od mongodb-core/lib/error.js, spójrz na ostatnią pętlę for.

function MongoError(message) { 
    this.name = 'MongoError'; 
    this.message = message; 
    Error.captureStackTrace(this, MongoError); 
} 

MongoError.create = function(options) { 
    var err = null; 
    if(options instanceof Error) { 
    err = new MongoError(options.message); 
    err.stack = options.stack; 
    } else if(typeof options == 'string') { 
    err = new MongoError(options); 
    } else { 
    err = new MongoError(options.message || options.errmsg || options.$err || "n/a"); 
    // Other options 
    for(var name in options) { 
     err[name] = options[name]; 
    } 
    } 
    return err; 
} 

więc, przedmiotem błędu wygląd, przynajmniej tak:

{ 
    "name": : "MongoError", 
    "message": "E11000 duplicate key error collection: main_db.stores index..." 
} 

pole err.code

Tak, nie ma gwarancji, dla innych dziedzinach, ale jest dość code powszechne (i bardzo przydatne). Ta liczba to wewnętrzny kod błędu mongodb, a sterownik po prostu dodaje go do obiektu MongoError, jeśli jest dostępny. Listę kodów błędów można znaleźć w pliku kodu źródłowego mongodb: error_codes.err.

Interesujący przykład o tym, jak zarządzać nodejs kierowca kody błędów MongoDB jest the collection bulkWrite source code, że używa toError utils z code rzucić MongoError.