2015-01-12 2 views
0

저는 Nodejs 세계에 초보자입니다. 몽구스를 사용하여 MongoDB에 데이터를 삽입하려고합니다. 아이디어는
입니다. 노드 에서 실행중인 서버를 갖게됩니다. 들어오는 POST 데이터는 Mongo에 저장됩니다.Mongoose를 사용하여 MongoDB에 데이터 저장 안 함

아래 코드를 실행해도 데이터가 MongoDB에 저장되지 않고 오류가 표시되지 않는 문제가 있습니다. 내가 여기서 뭔가를 놓치고 있니? 어떤 도움이라도 대단히 감사하겠습니다.

들어오는 http 요청에 대해 mongoDB에 데이터를 쓰는 아래 코드가 있습니다.

var http = require('http') // http module 
, fs = require('fs') // file system module 
, qs = require('querystring') // querystring parser 
, mongoose = require('mongoose'); 

mongoose.connect("mongodb://localhost/app_data_db"); 
var db = mongoose.connection; 
var appDataSchema = new mongoose.Schema({ 

    record_id:  Number, 
    app_version: Number, 
    imei:   String, 
    created_time: Date, 
    device_uid:  String, 
    model:   String 
}); 

var appDataModel = mongoose.model("app_data_collection",appDataSchema); 

var PORT=8080; 

http.createServer(function(req,res){ 

if(req.method == "POST") { 
    var POST = {}; 
    //parse query string 
    req.on('data', function(data) { 
     data = data.toString(); 
     data = data.split('&'); 
     for (var i = 0; i < data.length; i++) { 
      var _data = data[i].split("="); 
      POST[_data[0]] = _data[1]; 
     } 

     db.once('open', function (callback) { 
      appDataModel.create({ 
        record_id:  POST["id"], 
        app_version: POST["app_version"], 
        imei:   POST["imei"], 
        created_time: new Date((parseInt(POST["created_time"]) + 19800) *1000), // to set correct time zone IST 
        device_uid:  POST["device_uid"], 
        model:   POST["model"] 

       }); 
     }); 
     res.writeHead(200, {'Content-Type': 'text/plain'}); 
     res.end('saved to DB:'+POST["id"]+'\n'); 
     console.log('saved to DB:'+POST["id"]+'\n'); 
    }); 
    mongoose.disconnect(); 
} 


}).listen(PORT); 

나는 수동으로 컬 전화를 발사하고이를 테스트하려면 :

curl -X POST --data "id=58648148&app_version=4.8&imei=355886053224492&created_time=1417372202&device_uid=e385c8a5a4c01304&model=GT-I9082" http://localhost:8080 
+1

모델을 만들고 있지만 DB에 저장하지 않았습니다. –

답변

2

코드에 몇 가지 문제가 있습니다

1) 콜백의 mongoose.disconnect 외부 호출을 의미합니다 콜백이 실행되기 전에 호출됩니다.

2) 콜백 내에 모델을 생성하고 있지만 응답을 보내지 않기 때문에 응답이 전에 전송됩니다

mongoose.connect("mongodb://localhost/app_data_db"); 
db.on('open', function() { 
    http.createServer(function(req, res) { 

     if(req.method == "POST") { 
      var POST = {}; 
      //parse query string 
      req.on('data', function(data) { 
       data = data.toString(); 
       data = data.split('&'); 
       for (var i = 0; i < data.length; i++) { 
        var _data = data[i].split("="); 
        POST[_data[0]] = _data[1]; 
       }  

       appDataModel.create({ 
        record_id:  POST["id"], 
        app_version: POST["app_version"], 
        imei:   POST["imei"], 
        created_time: new Date((parseInt(POST["created_time"]) + 19800) *1000), // to set correct time zone IST 
        device_uid:  POST["device_uid"], 
        model:   POST["model"]   
       }, 
       function(err){ 
        res.writeHead(200, {'Content-Type': 'text/plain'}); 
        res.end('saved to DB:'+POST["id"]+'\n'); 
        console.log('saved to DB:'+POST["id"]+'\n'); 
        mongoose.disconnect(); 
       });      
      });  
     }   
    }).listen(PORT); 
}); 
+0

nodejs 사용법에 대한 힌트가 더 있습니다. 감사! 하지만 위의 코드를 시도했지만 여전히 작동하지 않습니다. curl 명령을 실행 한 후에는 출력이 없습니다. – vsingh

+0

@vsingh 코드를 업데이트하고 지금 시도해보십시오 (db open 이벤트를 사용하고 콜백으로 서버 생성을 이동했습니다) –

+0

@@ Vsevolod. 도움을 주셔서 감사합니다. 이것은 이제 또 다른 문제입니다. 첫 번째 컬은 데이터를 저장하지만 연속 호출은 저장되지 않습니다. 연속적인 호출은 출력없이 중단됩니다. – vsingh

0

: 모델은

3) 마지막으로 create 방법은 엔티티가 당신이 여기에 수정 된 코드의 IT 모든

를 사용하지 않는 DB에 저장되는 콜백을 제공 만들어집니다 나는 이것이 효과가 있다고 생각한다. 나는 몽구스 연결을 안에 옮겼다. 나머지는 모두 동일합니다. 내가 코멘트 대신에 대답하는 코드를 게시하고 싶었 기 때문에. 이것은 다른 사람들을 도울 수 있습니다. 전체 코드는 다음과 같습니다

var http = require('http') // http module 
    , fs = require('fs') // file system module 
    , qs = require('querystring') // querystring parser 
    , mongoose = require('mongoose'); 

var appDataSchema = new mongoose.Schema({ 
     record_id: Number, 
     app_version: Number, 
     imei: String, 
     created_time: Date, 
     device_uid: String, 
     model: String 
    }); 

var appDataModel = mongoose.model("app_data_collection", appDataSchema); 

var PORT = 8080; 

http.createServer(function(req, res) { 

    if (req.method == "POST") { 

     var POST = {}; 
     //parse query string 
     req.on('data', function(data) { 
      data = data.toString(); 
      data = data.split('&'); 
      for (var i = 0; i < data.length; i++) { 
       var _data = data[i].split("="); 
       POST[_data[0]] = _data[1]; 
      } 

      mongoose.connect("mongodb://localhost/app_data_db"); 
      var db = mongoose.connection; 

      db.on('error', console.error.bind(console, 'connection error:')); 

      db.once('open', function() { 
       appDataModel.create({ 
       record_id: POST["id"], 
       app_version: POST["app_version"], 
       imei: POST["imei"], 
       created_time: new Date((parseInt(POST["created_time"]) + 19800) * 1000), // to set correct time zone IST 
       device_uid: POST["device_uid"], 
       model: POST["model"] 

      }, function(err) { 
       res.writeHead(200, {'Content-Type': 'text/plain'}); 
       res.end('saved to DB:' + POST["id"] + '\n'); 
       console.log('saved to DB:' + POST["id"] + '\n'); 
       mongoose.disconnect(); 
      }); 
     }); 
    }); 
    } 

}).listen(PORT); 
관련 문제