2016-09-09 1 views
-1

MongoDB 컬렉션에서 데이터를 가져 와서 전역 객체에 저장하려고합니다. 나중에 HTML 템플릿으로 구문 분석해야합니다.MongoDB에서 데이터를 가져와 Node.js 및 Express.js의 전역 객체에 저장하십시오.

사용자 로그가 자신의 프로필에

: 여기 내 코드는 우리가 자신의 프로젝트를 얻을 필요가 여기에 우리가 findeprojects() 함수를 호출

다음
usrRouter.route('/profile') 
    .all(function (req,res,next) { 

     if(!req.user){ 
      res.redirect('/'); 
     } 
     next(); 
    }) 
    .get(function (req,res,userObj) { 
     // var proj = findprojects(); 

     userObj = req.user; 
     var pro = {}; 
     pro = findprojects(userObj); 
     res.render('index',{name:userObj.username, email:userObj.email}); 
     //res.sendFile('profile.html',{root:path.join(__dirname,'../public'),},{name:userObj.username}); 
    }); 

findeprojects 기능 코드는 다음과 같습니다

var findprojects = function(obj) { 
var usern = obj.username; 
mongodb.connect(url,function(err, db){ 
    if(err) throw err; 

    var collection = db.collection('projects'); 
    //console.log(usern); 
    collection.find({'pusername':usern}); 
    cursor =db.collection('projects').find({ 'pusername': usern }).toArray(function(err,items){ 
      //console.log(items); 
      var i; 
      for(i=0; i<items.length;){ 
       userProjects.createdBy = items[i].pusername; 
       userProjects.proName = items[i].projectName; 
       userProjects.proType = items[i].projectType; 
       userProjects.proDesc = items[i].projectDesc; 
       //return userProjects; 
      i = i+1; 
      } 

    }); 
    console.log(userProjects); 
}); 

}};

내가 좋아 상단에 전역 객체를 선언 한 :

userProjects = { 
createdBy:'', 
proName:'', 
proType:'', 
proDesc:'' 
}; 

하지만이 findeprojects()를 호출 한 후 userprojects 객체를 콘솔 때 빈 값을 표시 기능.

+0

당신은 루프 후이 값을 받고 있습니까? – abdulbarik

+2

잔인하게 솔직하게 말하자면, Node의 비동기 성질을 다루는 방법을 모르는 것처럼 보입니다. 문제의 해결책이 아닌 전역 변수를 사용하여 문제를 해결하려고합니다. 훨씬 간단한 것으로 시작한다면 (게시하는 코드에 많은 움직이는 부분이 있음) 비동기 함수를 처리하는 방법에 대한 좋은 자습서를 읽는 것이 더 쉬울 것이라고 생각합니다. – robertklep

+0

데이터를보고 싶다면'toArray' 메소드의 콜백 함수 측에서'console.log' 문을 움직일 수 있습니다. 그러나 나는 또한 @rokeryklep에 동의한다. – Mike

답변

2

왜 몽구스로 물건을 모델링하지 않습니까? 더 직관적이어서 전역 객체를 선언하고 수행중인 for 루프에서 매핑을 수행 할 필요가 없습니다.

또한 접근 방법이 약간 씩 틀리면 반복 할 때 겹쳐 쓰지 않으시겠습니까? pusername이 abdul 인 두 개의 문서가 있다고 가정 해보십시오. 그래서 두 번째 객체가 덮어 쓸 첫 번째 객체가 느슨해집니다.

나는 당신이 반환 진술서를 주석 처리 했음에도 불구하고 제대로 작동하지 않는다는 것을 알고 있습니다.

디자인의 관점에서 접근 방식이 효율적이지 않습니다. 당신은 몽구스의

을 수행 할 수 있습니다

{ 

    var userProjectSchema = new mongoose.Schema({ 
     createdBy: { type: String } 
    , proName: String 
    , proType: String 
    , proDesc: String 
    }); 


// Find a single document by username. 
userProjectSchema.findOne({ pusername : 'abdul' }, function(err, resDoc) { 
    if (err) return console.error(err); 
    // do your html stuff here 
}); 

// Find all documents. 
userProjectSchema.find(function(err, results) { 
    if (err) return console.error(err); 
    // do your html stuff here 
}); 


    } 
관련 문제