2

我是 NodeJS 新手,也是第一次尝试 DI 的 JS can-kicker。以下是我在决定问我之前看过的问题,因为它们显示相同的错误:[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);

./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 回答
0

事实证明,JohnnyHK 关于它是一个版本问题是正确的。

奇怪的是,运行时错误并没有消失npm update mongodb

但是,当我第二次运行时,它确实消失npm install mongodb了。代码中没有进行任何更改,并且 mongodb 已经在本地 node_modules文件夹中。node_modules即便如此,我怀疑这与 in 中的实例和 in 中的实例之间的差异有关NODE_PATH

我只是在猜测为什么npm install考虑到应该安装最新版本而完全解决了这个问题。我所知道的是错误消失了,代码正在运行。

谢谢你的意见!

于 2013-05-24T21:51:08.007 回答