このタイトル自体は命題です。デフォルトでは、node.jsアプリケーションの各モジュールは同じデータベース接続と共有されるためです。しかし、姿勢が間違っている場合、それはugいものであり、間違っている可能性さえあります。
次の部分を無視して、ポイントに到達できます。
背景
最近、私はプロのコースデザインを行っています。タイトルは「航空券の予約管理システム」です。要件は比較的簡単なので、最近学んでいたnode.jsを使用しようとしました。また、どのようなnode.jsフレームワークがより適しているかを調査していました。いくつかのフレームワークを読んだ後、これは殺人者であることがわかりました。ドキュメントと検索情報を読む時間がある場合は、直接書くことをお勧めします。最後に、書いた後、コードをGitHubに配置します。誰もが私を批判し、修正することを歓迎します。
データベースに関しては、私はJSONに精通していて気に入っていると思っていました(SQLをよく学ばなかった場合は認めます-_-#)。 Node + Mongoは近年、ますます人気のあるバックエンドの組み合わせであり、インターネットで一緒に使用する方法に関する多くの情報があります。しかし、時間を節約するために(コース設計は1週間以上です)、システムとロジックにもっと焦点を当てるために、MongoDBデータモデリングに特別に使用されるNode.js拡張機能であるMongooseを使用して、データベースを操作するコードを大幅に削減しました。
メイントピック
2つのデータモデルを確立しました。1つはユーザー(ユーザー)、もう1つはフライト(フライト)で、user.jsの2つのモジュール(モジュール)にカプセル化されています。モデルは、データベースとの対話に特に責任があります。ユーザーモジュールとフライトモジュールの両方がデータベースに接続する必要があります。最初は、私のコードは次のとおりでした:
// ------ user.js ----- // mongoose.jsリファレンスmongoose.jsvar m = require( 'mongoose'); //データベースに接続してデータベースに接続してください。 require( 'mongoose'); //データベースに接続してデータベースM.Connect( 'mongodb:// test'); // ...他のコード... // ------ models.js ------ var user = require( './ user')、flight = require( './ flight');
言うまでもなく、この書き込み方法はまったく乾燥していないため、この方法自体は間違っています。 index.jsを実行すると、次のエラーが発生します。
> node index.js>接続エラー:{[エラー:閉じられていない接続を開こうとします。]状態:2}エラーは次のとおりです。閉鎖されていない接続を開いてみてください。
したがって、データベースに1つの場所に接続する必要があり、次にデータベースに接続する必要がある他のモジュールがこのモジュールを介してデータベースと対話する必要があります。それは配線板のようなもので、彼はためらうことなく叫びました:「壁には1つのソケットしかありません、それを奪わないでください!行かせてください!あなたは...それは大丈夫です!」
特定の計画
データベースに接続するアクションをモジュールに入れて、アプリケーション全体の他のモジュールに接続を公開すると、データベースに接続する必要がある他のモジュールがこの接続を参照できます。
// ----- Database.js ----- var m = require( 'mongoose'); m.connect( 'mongodb:// localhost/test'); //データベース接続への参照この接続の参照を作成しますvar db = m.connection; ----- user.js ----- flight.js類似-----/...他のコード... //データベース接続の参照をmodels.js module.exports = function(db){// ...接続を使用して物事を実行する場合...データベース接続への参照データベースモジュールを参照し、データベース接続の参照を取得しますvar db = require( './ database'); var user = require( './ user')(db)、flight = require( './ flight')(db);これは、データベース接続を共有するnode.jsアプリケーションの複数のモジュールを取得する1つの方法です。 Stackoverflowで見ました。より良い方法がある場合は、コメントでそれを共有してください!