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.
Doskonale, dziękuję! – qJake