2017-12-31 323 views
0

Mongoose를 사용하여 MongoDB에 데이터를 추가하려고하는데 데이터를 데이터베이스에 저장하는 데 문제가 있습니다. 나는 this 튜토리얼을 YouTube에서 (~ 11 분) 따르고 있지만, 비디오가 몽구스의 다른 버전을 사용하고있을 수도 있다고 생각합니다.Mongoose에 시드 된 데이터가 MongoDB에 저장되지 않았습니다.

기본적으로 별도의 JS 파일에 제품 스키마가 정의되어 있으며 실행중인 Mongo 데몬이있는 터미널에서 node productSeeder.js을 실행하여 productSeeder.js라는 파일을 실행하고 있습니다. 올바른 데이터베이스로 전환하고을 Mongo 셸에 입력하면 아무 것도 나에게 반환되지 않습니다.

내 productSeeder.js 파일 :

var Product = require('../models/product'); 
var mongoose = require('mongoose'); 
mongoose.connect('mongodb://localhost:27017/shopping'); 

var products = [ 
    new Product({ 
     imagePath: 'images/dummy.png', 
     price: 9, 
     title: 'a title', 
     desc: 'some text' 
    }), 
    new Product({ 
     imagePath: 'images/dummy.png', 
     price: 5, 
     title: 'a title', 
     desc: 'some text' 
    }) 
]; 

var done = 0; 
for (var i = 0; i < products.length; i++) { 
    products[i].save(function(err, result) { 
     if (err) { 
      console.log(err); 
      return; 
     }; 

     done++; 
     if (done == products.length) { 
      mongoose.disconnect(); 
     }; 
    }); 
}; 

내 product.js 파일 :

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var schema = new Schema({ 
    imagePath: {type: String, required: true}, 
    price: {type: Number, required: true}, 
    title: {type: String, required: true}, 
    desc: {type: String, required: true} 
}); 

module.exports = mongoose.model('Product', schema); 

정말 고마워요, 행복한 휴일!

+0

콘솔에 오류가 있습니까? console.log를 사용하거나 저장 콜백에 의해 반환 된 결과 값을 디버깅 했습니까? 포함 된 내용은 무엇입니까? – SunriseM

+0

오류가 없습니다. 결과를 인쇄 해 보았습니다. 올바른 제품을 인쇄합니다. – gridproquo

+0

'if done' 내에서 Product.find ({}, function (err, products) {console.log (products.length)})를 내 코드에 추가했습니다. 어떤 이유로 전체 파일을 실행할 때마다 길이가 증가하므로 실제로 데이터가 저장되고 있습니까? 데이터가 MongoDB 쉘에서 나에게 반환되지 않는 이유가 있을까요? – gridproquo

답변

-1

얼핏

첫째로 당신은 당신이 iffe에 명령을 저장 포장해야한다. 이 같은 것

for (var i = 0; i < products.length; i++) { 
    (function (result) { 
     products[i].save(function(err, result) { 
      if (err) { 
       console.log(err); 
       return; 
      }; 

      done++; 
      if (done == products.length) { 
       mongoose.disconnect(); 
      }; 
     });  
    })(result);  
}; 
+0

이것은 "결과가 정의되지 않았습니다."를 던질 것입니다. 아마도 "i"를 전달한다는 의미입니다. 그러나 콜백 안에서 사용하지 않으므로 사용법을 알 수 없습니다. – SunriseM

+0

네가 맞다, 나는 의미한다.하지만 쓸모가 없다. – pkpk

0

제품을 저장하기 전에 몽구스가 성공적으로 연결되었는지 알고 계십니까?

Db 액세스가 비동기 적이기 때문에 연결이 존재하기 전에 항목을 저장하려고합니다.

연결에 콜백을 전달하거나 이벤트 수신기를 사용하고 연결 콜백에서 저장 함수를 래핑 할 수 있습니다.

mongoose.connection.on('connected', function(){ 
    //save products here 
}); 

나는 몽구스의 몇 가지 사례를 오류없이 저장하지 못했습니다.

편집 : .on('open') 대신 (mongoose docs)을 수신하는 것이 좋습니다.

+0

불행히도 작동하지 않았다. ( – gridproquo

+0

'mongo' 쉘에'use shopping'과'show collections'을 입력하면 'products' collection? 당신이 사용하고있는 몽구스 모델 코드를 게시 할 수 있습니까? YouTube 비디오에 묶여있는 저장소에서 찾을 수 없습니다 – thmsdnnr

+0

원래 게시물을 모델 코드로 업데이트했습니다.'show collections' – gridproquo