无法使用Node.js从mongoDB检索数据

时间:2015-02-27 17:00:16

标签: javascript node.js mongodb

我在Node.js中很新,我有这个项目。基本上我有一些数据存在于mongoDB集合中("数据"),我试图获取该数据并将其显示在浏览器上。

这是我到目前为止所得到的;

    var MongoClient = require('mongodb').MongoClient
        ,format = require('util').format;
    var sys = require ("sys");
    my_http = require("http");

      my_http.createServer(function(request, response){
         sys.puts("Touched !!");
         response.writeHeader(200, {"Content-Type": "text/plain"});
         response.write(extractData()).toString();
         response.end();
     }).listen(8080);
sys.puts("Server is running on 8080"); // Server kicks in...np

function extractData(){

    MongoClient.connect('mongodb://127.0.0.1:27017/mongoDB', function(err, db){
        if (err){
            console.log("Can't Connect to DB !!");
        }else {
            console.log("Connected to DB !!");   // connects to DB, np
            db.data.find({}, function(err, data){  // .find is the problem
                if (err || !data) console.log("No Data Found");
                else data.forEach(function (data){
                    console.log(data);
                });
            }).toArray();
        }
    });
}

在我运行"节点server.js"并刷新已经打开的localhost:8080,我明白了;

Server is running on 8080
Touched !!
Touched !!
Connected to DB !!

d:\Projects\SCRIPTS\mdp.scripts.testing-tools\jsFinderWmongoDB\node_modules\mongodb\lib\mongodb\mongo_client.js:475
          throw err
                ^
TypeError: Cannot call method 'find' of undefined
    at d:\Projects\SCRIPTS\mdp.scripts.testing-tools\jsFinderWmongoDB\server.js:21:21
    at d:\Projects\SCRIPTS\mdp.scripts.testing-tools\jsFinderWmongoDB\node_modules\mongodb\lib\mongodb\mongo_client.js:4
72:11
    at process._tickCallback (node.js:415:13)

不明白为什么.find()出现问题,当然无法显示任何数据......

有什么想法吗?

编辑:

嗯,我们肯定会到达某个地方。我做了一些改变。

当前代码:

function extractData(){

MongoClient.connect('mongodb://127.0.0.1:27017/mongoDB', function(err, db){
        if (err){
            console.log("Can't Connect to DB !!");
        }else {
            sys.puts("Connected to DB !!");   // connects to DB, np
            db.collection('data').find({}, function(err, data){  
                if (err || !data) console.log("No Data Found");
                //else db.collection('data').forEach(function (data){
                //    console.log(data);
                //});
            });//.toArray();
        }
    });
}

浏览器响应是"未定义"

我在猜测" extractData"功能不是返回合法的东西。因此收集集"数据"回来是空的。

是的,我已经再次检查过,我在数据集中有数据。

2 个答案:

答案 0 :(得分:1)

您需要先设置一个集合才能使用它。

var collection = db.collection('data');
collection.find({},function(err,data){
    console.log(data);
});

你会怎么做。

更新**这就是我使用express做我的第一个mongoDB的方法 可以帮到你。

var mongo = require('mongodb');
var monk = require('monk');
var db = monk('localhost:27017/nodetest1');

app.get('/userlist', function(req, res) {
var db = req.db;
var collection = db.get('usercollection');
 collection.find({},{},function(e,docs){
    res.render('userlist', {
        "userlist" : docs
    });
 });
});

答案 1 :(得分:0)

执行console.log(data);

时,我会获得有关存储数据的详细信息

以下是它的一瞥

Server is running on 8080
Touched !!
Connected to DB !!
{ db: 
   { domain: null,
     _events: {},
     _maxListeners: 10,
     databaseName: 'mongoDB',
     serverConfig: 
      { domain: null,
        _events: {},
        _maxListeners: 10,
        auth: [Getter],
        _callBackStore: [Object],
        _commandsStore: [Object],
        _dbStore: [Object],
        host: '127.0.0.1',
        port: 27017,
        options: [Object],
        internalMaster: true,
        connected: true,
        poolSize: 5,
        disableDriverBSONSizeCheck: false,
        _used: true,
        replicasetInstance: null,
        emitOpen: false,
        ssl: false,
        sslValidate: false,
        sslCA: null,
        sslCert: undefined,
        sslKey: undefined,
        sslPass: undefined,
        serverCapabilities: [Object],
        name: '127.0.0.1:27017',
        socketOptions: [Object],
        logger: [Object],
        eventHandlers: [Object],
        _serverState: 'connected',
        _state: [Object],
        recordQueryStats: false,
        socketTimeoutMS: [Getter/Setter],
        _readPreference: [Object],
        db: [Circular],
        dbInstances: [Object],
        connectionPool: [Object],
        isMasterDoc: [Object] },
     options: 
      { read_preference_tags: null,
        read_preference: 'primary',
        url: 'mongodb://127.0.0.1:27017/mongoDB',
        native_parser: true,
        readPreference: [Object],
        safe: false,
        w: 1 },
     _applicationClosed: false,
     slaveOk: false,
     bufferMaxEntries: -1,
     native_parser: true,
     bsonLib: 
      { BSON: [Object],
        Long: [Object],
        ObjectID: [Object],
        DBRef: [Object],
        Code: [Object],
        Timestamp: [Object],
        Binary: [Object],
        Double: [Object],
        MaxKey: [Object],
        MinKey: [Object],
        Symbol: [Object] },
     bson: { promoteLongs: true },
     bson_deserializer: 
      { Code: [Object],
        Symbol: [Object],
        BSON: [Object],
        DBRef: [Object],
        Binary: [Object],
        ObjectID: [Object],
        Long: [Object],
        Timestamp: [Object],
        Double: [Object],
        MinKey: [Object],
        MaxKey: [Object],
        promoteLongs: true },
     bson_serializer: 
      { Code: [Object],
        Symbol: [Object],
        BSON: [Object],
        DBRef: [Object],
        Binary: [Object],
        ObjectID: [Object],
        Long: [Object],
        Timestamp: [Object],
        Double: [Object],
        MinKey: [Object],
        MaxKey: [Object],
        promoteLongs: true },
     _state: 'connected',
     pkFactory: 
      { [Function: ObjectID]
        index: 16043018,
        createPk: [Function: createPk],
        createFromTime: [Function: createFromTime],
        createFromHexString: [Function: createFromHexString],
        isValid: [Function: isValid],
        ObjectID: [Circular],
        ObjectId: [Circular] },
     forceServerObjectId: false,
     safe: false,
     notReplied: {},
     isInitializing: true,
     openCalled: true,
     commands: [],
     logger: { error: [Function], log: [Function], debug: [Function] },
     tag: 1425061857066,
     eventHandlers: 
      { error: [],
        parseError: [],
        poolReady: [],
        message: [],
        close: [] },
     serializeFunctions: false,
     raw: false,
     recordQueryStats: false,
     retryMiliSeconds: 1000,
     numberOfRetries: 60,
     readPreference: { _type: 'ReadPreference', mode: 'primary', tags: undefined } },
  collection: