2012-08-14 68 views
1
var express = require('express'); 
    var routes = require('./routes'); 
    var socket = require('socket.io'); 
    var fs = require('fs'); 
    var app = module.exports = express.createServer(); 
    var Server = require('mongodb').Server, 
     Db = require('mongodb').Db, 
     Connection = require('mongodb').Connection; 
    var host = 'localhost'; 
    var port = Connection.DEFAULT_PORT; 
    var db = new Db('node-mongo-examples', new Server(host, port, {}), {native_parser:false}); 

    db.open(function(err, db) { 
     console.log('opened'); 
     app.listen(3000); 

    }); 


    db.collection('locations', function(err, collection) { 
      var object= {word:'TEST'}; 
      collection.insert(object, {safe:true}, function(err, result) { 
      var array = collection.findOne({word:'TEST'}, function(err, item) {});    
      console.log(array);// <----always "undefined" 
      });   
    }); 

我尝试将对象插入到数据库中。通过每次使用“console.log(array)”,我发现它总是“未定义”。它不能被插入到数据库中,或者无法从数据库中找到。我该如何解决它?为什么我不能使用node.js将对象插入到mongodb中?

但是,'console.log(item)'显示'null'。那么它是否成功插入到数据库中,或者我应该改变另一种从数据库中获取对象的方式。

回答

2

collection.findOne是异步的,所以你不使用函数的返回值;相反,你应该从你的(当前为空)回调中得到console.log(item)

db.collection('locations', function(err, collection) { 
    var object= {word:'TEST'}; 
    collection.insert(object, {safe:true}, function(err, result) { 
     collection.findOne({word:'TEST'}, function(err, item) { 
      console.log(item); 
     }); 
    });   
}); 
+0

非常感谢。 QQ〜 – MaryHo 2012-08-14 04:35:19

+0

我可以问.....物品现在是空的。我应该如何在该findone函数中添加回调。 – MaryHo 2012-08-15 02:18:55

相关问题