2012-01-09 5 views
2

Voici mon code-pilote ++ MongoDB C ne pas jeter erreur de connexion

DBClientBase *conn = NULL; 
string err_msg; 
ConnectionString cs = ConnectionString::parse(connString, err_msg); 

if (!cs.isValid()) { 
    throw "bad: " + err_msg; 
} 

try { 
    conn = cs.connect(err_msg); 
} 
catch (DBException &e) { 
    cout << "caught " << err_msg << endl; 
    return 1; 
} 

if (!conn) { 
    cout << "Unable to connect to DB" << endl; 
    return 1; 
} 

Je me attends MongoDB à jeter exception dans le cas où DB n'est pas accessible. Cependant, je constate que if (!conn) est satisfait.

Pourquoi

catch (DBException &e) { 
    cout << "caught " << err_msg << endl; 
    return 1; 
} 
bloc

ne fonctionne pas?

Répondre

2

De the current trunk source, ConnectionString::connect semble seulement lancer une exception lorsque la chaîne elle-même était invalide (et vous savez déjà que ce n'était pas le cas, à partir de votre première instruction conditionnelle).

Il retourne juste un pointeur NULL et définit errMsg dans tous les autres cas. Pour votre défense, je ne pouvais pas trouver cela documenté nulle part du tout; a very basic example of connect était tout ce que je pouvais trouver.

string err_msg; 
ConnectionString cs = ConnectionString::parse(connString, err_msg); 

if (!cs.isValid()) { 
    throw "bad: " + err_msg; 
} 

DBClientBase* conn = cs.connect(err_msg); 

if (!conn) { 
    cout << "Unable to connect to DB: " << err_msg << endl; 
    return 1; 
} 
Questions connexes