2

私は NodeJS の初心者であり、DI を初めて試している JS キッカーです。同じエラーが表示されるため、私が質問する前に確認した質問は次のとおりです。[1] [2]

エントリ ポイントを実行すると、次の結果が得られます。

this.client = new MongoClient(server);
              ^
TypeError: undefined is not a function

エントリーポイント

var config    = require('./config.json');
var Providers = require('./providers');
var providers = new Providers(config.db);
console.log(providers);

./プロバイダー/index.js

AssetProvider と UserProvider の両方で同じエラーが発生します。一つだけ見せればいいと思います。

module.exports = function Provider(dbConfig)
{
    var UserProvider  = require('./userProvider');
    var AssetProvider = require('./assetProvider');

    this.users  = new UserProvider (dbConfig.name, dbConfig.host, dbConfig.port);
    this.assets = new AssetProvider(dbConfig.name, dbConfig.host, dbConfig.port);
}

./providers/userProvider.js

マークされた問題行

var mongodb     = require('mongodb');
var MongoClient = mongodb.MongoClient;
var Server      = mongodb.Server;
var ObjectID    = mongodb.ObjectID;


var UserProvider = function (database, host, port) {
    var server  = new Server(host, port, { auto_reconnect: true });

    // Error is here
    this.client = new MongoClient(server);

    this.client.open(function (error, client) {
        this.db = client.db(database);
    });
};

// ...a bunch of prototype stuff...
// ...

module.exports = UserProvider;

オンラインの他の場所で読んだことから、構文に問題はありません。私は次の宣言を試みました...

function UserProvider(database, host, port)

とは対照的に

var UserProvider = function(database, host, port)

それ以外のことは、車のエンジンをレンチで叩くようなものでした。真実は、私はここで何が間違っているのかを理解していませんが、エントリポイントが単一のオブジェクトを介してすべてのプロバイダーを簡単に使用できるように、ファイル全体でオブジェクトの構成を作成したいだけであることは知っています.

4

2 に答える 2

0

まったく同じ問題が発生しました。簡単な調査の後、古い mongodb モジュール バージョン (0.9.x) を使用していることに気付きました。最新 (1.13.19) をインストールした後、問題は修正されました。

npm install mongodb@1.3.13
于 2013-10-20T15:39:14.150 に答える