2014-12-21 3 views
1

누군가 어떻게 이런 일이 발생했는지 설명 할 수 있습니까? Express에서 어레이가 리턴되기 전에 손상되고 있습니다. 아래의 예에서는 성공적으로 resData.user.apps 배열을 채우고 있으며 서버의 콘솔 로그를 통해이를 볼 수 있습니다. resData 객체가 반환 될 때 그러나, 배열이 비어 :ExpressJS에서 배열을 반환하는 방법은 무엇입니까?

// Build the response 
var resData = { 
    success: true, 
    user: { 
     email: newUserItem.email, 
     apps: [] 
    } 
}; 

// Add any default applications 
Application.find({ isDefault: true, isDeleted: false }, function(err, defaultApps){ 
    if (err){ 
     console.log(err); 
     return res.status(500).send({ message: 'Failure loading default applications.' }); 
    } else { 
     if (defaultApps.length < 1){ 
      console.log('No default apps'); 
     } else { 
      defaultApps.forEach(function(defaultApp){ 
       var app = { 
        name: defaultApp.formalName, 
        url: defaultApp.url, 
        def: true 
       }; 

       console.log(app); 
       resData.user.apps.push(app); 

       console.log('Sanity: ' + JSON.stringify(resData)); 
      }); 
     } 
    } 
}); 

return res.send(resData); 

답변

0

여기서 문제는 찾기가 호출이 완료되기 전에 사용자가 응답을 다시 작성되도록 비동기 것입니다. Move res.send (resData); 찾기 콜백에 넣습니다.

Application.find({ isDefault: true, isDeleted: false }, function(err, defaultApps){ 
    if (err){ 
     console.log(err); 
     return res.status(500).send({ message: 'Failure loading default applications.' }); 
    } else { 
     if (defaultApps.length < 1){ 
      console.log('No default apps'); 
     } else { 
      defaultApps.forEach(function(defaultApp){ 
       var app = { 
        name: defaultApp.formalName, 
        url: defaultApp.url, 
        def: true 
       }; 

       console.log(app); 
       resData.user.apps.push(app); 

       console.log('Sanity: ' + JSON.stringify(resData)); 

      }); 


     } 
     res.send(resData); 
    } 
}); 
+0

어! 내가 그걸 믿을 수 없어. 고마워, TGH. –

관련 문제