1. ホーム
  2. javascript

[解決済み] 1つのnode.jsプロジェクトでMongooseと複数のデータベースを利用する。

2022-04-30 18:46:13

質問

私は、サブプロジェクトを含むNode.jsのプロジェクトを行っています。一つのサブプロジェクトには一つのMongodbデータベースがあり、Mongooseはデータベースのラップとクエリに使われる予定です。しかし、問題は

  • モデルは1つの接続で構築されるため、Mongooseでは1つのMongooseインスタンスで複数のデータベースを使用することはできません。
  • Node.jsでは、複数のmongooseインスタンスを使用するために、複数のモジュールインスタンスを使用することはできません。 require() . Node.jsのモジュールキャッシュを無効にすることはできますが、それはmongooseにしか必要ないので、良い解決策とは言えないと思います。

    私は createConnection()openSet() をmongooseに入れましたが、解決には至りませんでした。

    mongooseインスタンスをディープコピーしてみたのですが( http://blog.imaginea.com/deep-copy-in-javascript/ を投げてしまいます。 RangeError: Maximum call stack size exceeded .

mongooseで複数のデータベースを使用する方法、またはこの問題を回避する方法はありますか?mongooseは非常に簡単で高速だと思うので。また、他のモジュールはどうでしょうか?

解決方法は?

ひとつは、プロジェクトごとにサブフォルダを用意することです。そのサブフォルダに mongoose をインストールし、それぞれのサブアプリケーションのフォルダから mongoose を require() します。プロジェクトのルートやグローバルからではなくです。つまり、1つのサブプロジェクトに1つのmongooseをインストールし、1つのmongooseインスタンスを作成します。

-app_root/
--foo_app/
---db_access.js
---foo_db_connect.js
---node_modules/
----mongoose/
--bar_app/
---db_access.js
---bar_db_connect.js
---node_modules/
----mongoose/

foo_db_connect.jsで

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/foo_db');
module.exports = exports = mongoose;

bar_db_connect.jsにて。

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/bar_db');
module.exports = exports = mongoose;

db_access.jsファイル内

var mongoose = require("./foo_db_connect.js"); // bar_db_connect.js for bar app

これで、mongooseで複数のデータベースにアクセスできるようになりました。