mLabでホストされているMongoDBとExpressおよびTypeScriptでNode.jsを使用しています。私の問題は、サーバーを稼動させたときにデータベースに1つの要求を正確に行うことができ、後続の要求が"トポロジが破棄されました"ということです。私のコードは次のようになります。1回の接続後にMongoが「トポロジが破棄されました」を投げる
export function getTeamName(id: string, callbackSuccess: (name) => void, callbackError?: (error) => void) {
initDb(() => {
db.collection('teams', (err: Error, teams) => {
if (err) { callbackError(err); db.close(); return; }
else {
teams.findOne({ '_id': id }, { 'name': 1 }, (error, name) => {
if (error) { callbackError(error); db.close(); return; }
else { callbackSuccess(name); db.close(); }
});
}
})
}, (err) => {
callbackError(err);
})
}
そしてinitDb()
方法:
import { Server, Db } from 'mongodb'; //using mongodb typings
var server = new Server("*******.mlab.com", *****, { auto_reconnect: false });
var db = new Db('serverName', server, { w: 1 });
function initDb(callbackSuccess: (data) => void, callbackError?: (err) => void) {
db.open((err, db) => {
if (err) {
callbackError(err);
}
else {
db.authenticate("username", "password", (error, data) => {
if (error) {
callbackError(err);
}
else {
callbackSuccess(data);
}
});
}
});
}
はあなたの助けをいただき、ありがとうございます。
「トポロジが破棄されました」とは、通常、アプリケーションが閉じられた後に接続を再利用しようとしたことを意味します。 http://stackoverflow.com/questions/30909492/mongoerror-topology-was-destroyedを参照してください。あなたのアプリケーションのどの部分もデータベース接続を閉じますか? –
それはそれだった。私のネットワークには、mLabへの接続を妨げるファイアウォールがありました。 – wilsonhobbs