2014-12-15 3 views
-2

노드의 일부 배열에서 작업 중이며 프런트 엔드에 하나의 JSON 객체로 보내고 싶습니다. 나는이를 위해 익스프레스를 사용한다. 나는 사용자라는 이메일을 기반으로 사용자를 찾는 모델을 가지고있다. 그 이메일은 배열로 제공됩니다. 나는 사용자 객체를 얻지 만 그것들로부터 하나의 JSON 객체를 생성 할 수 없다!NodeJS 배열에서 json 객체를 만듭니다.

일부 미들웨어를 사용해 보았지만 어떤 결과도 얻지 못했습니다! https://www.npmjs.com/package/node.extend

var users = {}; 
for (var i = 0; i <emails.length; i++) { 
    User.findOne({ 
     'email': project.students[i] 
    }, function (err, user) { 
     if (err) { 
      res.send(err); 
     } 

     // Fill the users object with each user found based on the email 
    }); 
} 

console.log(users); // Should be one JSONObject 

도움 주셔서 감사합니다!

+0

'사용자'를 객체로 정의하면 배열이 될 때까지 기다리는 이유는 무엇입니까? –

답변

2

단일 쿼리에서이 작업을 수행 할 수 있어야합니다. 몽구스를 사용하는 것 같아서 다음과 같이 해보십시오 :

User.find({ email: { $in: emails } }, function(err, results) { 
    if (err) return res.send(err); 
    res.send(results); 
}); 

자바 스크립트는 단일 스레드입니다. 즉, 많은 작업이 비동기 적으로 발생하므로 작업을 계속하기 전에 작업이 완료 될 때까지 기다려야합니다. 위의 콘솔 로깅 명령문은 데이터베이스 조작이 완료되기를 기다리지 않습니다. 콜백 함수가 실행될 때까지 기다려야합니다.

업데이트 : emails을 반복하고 있지만 각 반복마다 project.students[i]을 사용하고있는 것으로 나타났습니다. 나머지 코드는 볼 수 없지만 이는 버그 코드 일뿐입니다. 반복 할 때마다 project.students또는을 반복하거나 emails[i]을 사용해야합니다.

업데이트 2 : 응답이있는 사용자 배열 이상을 보내고 싶습니다. 첫 번째 목표는 $in 연산자를 사용하여 단일 쿼리를 사용하는 것입니다 (위의 예를 참조하십시오. 전자 메일 목록을 몽구스로 전달할 수 있어야합니다). 당신이에 대해 신경 쓰면 mongo 관련, 당신은 항상 데이터베이스에 대한 쿼리의 양을 줄이길 원합니다. 두 번째 작업은 사용자 및 기타 데이터를 그에 따라 다시 포맷하는 것입니다.

var finalResponse = { token: "12341234", users: null }; 
User.find({ email: { $in: emails } }, function(err, results) { 
    if (err) return res.send(err); 
    if (!results.length) return res.send(finalResponse); 

    // OPTION 1: Array of users (recommended) 
    finalResponse.users = results; 


    // OPTION 2: users object, keyed by the users email 
    finalResponse.users = {}; 
    results.forEach(function(user) { 
     finalResponse.users[user.email] = user; 
    }); 

    // FINALLY, send the response 
    resp.send(finalResponse); 
}); 
+0

글쎄요, 프론트 엔드 (AngularJS)에서도 로그를 남기고 배열도 비어 있습니다. 내 목표는 객체를 결합하여 객체로 내 응답에 객체를 전달하는 것입니다. 이후 사용자가 훨씬 더 많은 것을 반환합니다. – bobbybouwmann

+0

더 많은 데이터를 보내는 예제를 보여주기 위해 내 대답을 업데이트했습니다. –

+0

아아 나는 아이디어를 얻었고, 그것을 시험해 보자 : D – bobbybouwmann

관련 문제