2012-08-14 4 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

+0

물어볼 수 있습니다 .....이 항목은 이제 비어 있습니다. 어떻게 그 findone 함수에서 콜을 다시 추가해야합니까? – MaryHo

관련 문제