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)」を使用することで、常に「未定義」であることがわかります。データベースに挿入できないのか、それともデータベースから見つけることができないのか。どうすれば解決できますか?

ただし、「console.log(item)」には「null」が表示されます。それで、データベースに正常に挿入されますか、それともデータベースからオブジェクトを取得する別の方法を変更する必要があります。

4

1 に答える 1

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);
       });
     });        
 });
于 2012-08-14T03:42:24.920 に答える