2016-12-19 11 views
0

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

はあなたの助けをいただき、ありがとうございます。

+0

「トポロジが破棄されました」とは、通常、アプリケーションが閉じられた後に接続を再利用しようとしたことを意味します。 http://stackoverflow.com/questions/30909492/mongoerror-topology-was-destroyedを参照してください。あなたのアプリケーションのどの部分もデータベース接続を閉じますか? –

+0

それはそれだった。私のネットワークには、mLabへの接続を妨げるファイアウォールがありました。 – wilsonhobbs

答えて

0

ネットワークにファイアウォールがないことを確認してください...それが私の問題でした。

+0

これは古い答えですが、いくつかのドキュメントを適切な場所に置いている間、私はこれを見つけました。ファイアウォールを持たないことは決してお勧めできません。ファイアウォールに正しいルールを設定し、予期した通信を可能にする方が良いでしょう。 – akaphenom

+0

@akaphenom間違いなく良い点です。私はIPトンネリングを禁止する学校ネットワーク上にいたので、dbに接続していました。ファイアウォールが制御できないことがあります。 – wilsonhobbs

関連する問題