2012-01-09 3 views
2

Вот мой код-драйвер MongoDB C++ не бросает ошибку соединения

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; 
} 

Я ожидал бы MongoDB бросить исключение в случае БД не доступен. Тем не менее, я нахожу, что if (!conn) удовлетворен.

Почему

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

блок не работает?

ответ

2

От the current trunk source, ConnectionString::connect, похоже, генерирует исключение, когда сама строка недействительна (и вы уже знаете, что это не так, из вашего первого условного оператора).

Он просто возвращает указатель NULL и устанавливает errMsg во всех остальных случаях.

В вашей защите я вообще не мог найти эту документацию; a very basic example of connect было все, что я мог найти.

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; 
} 
Смежные вопросы