2013-07-17 2 views
1

아약스 호출을 통해 요청할 때 다음 오류 및 충돌을 일으키는 1000 개가 넘는 항목 (1000 개 항목 이하입니다)을 가진 콜렉션이 있습니다 : (노드) 경고 : 재귀 프로세스. nextTick이 감지되었습니다. 이것은 노드의 다음 버전에서 중단됩니다. 반복적 인 지연을 위해서는 setImmediate를 사용하십시오.노드 서버가 1000 개가 넘는 객체에서 충돌합니다.

이것은 현지 개발 과정에서 발생하지 않습니다. (실제로 로컬 개발자와 아무런 관련이 없음 로컬 컴퓨터에서 v0.10.0을 실행 중이며이 문제는 10.0입니다.)

mongodb 데이터베이스와 몽구스로 노드 v0.10.8을 실행 중입니다.

하지만 가장 좋은 해결책은 무엇입니까?

참조 코드 : 결과 세트의 많은 문서와

Collection.find().select('_id', 'first_name').sort('startTime', -1).exec(function(err,     

    docs){ 

      var data = {'aaData' : docs}; 
      res.send(data); 

     }); 

답변

4

, 당신은 하나 개의 큰 배열을 얻기보다는 streaming에 대한 쿼리의 결과를 몽구스의 지원을 사용해야합니다.

var stream = Collection.find() 
    .select('_id', 'first_name') 
    .sort('startTime', -1) 
    .stream(); 

stream.on('data', function (doc) { 
    // do something with the doc like res.write(doc); 
}).on('error', function (err) { 
    // handle the error 
}).on('close', function() { 
    // the stream is closed, so complete the response with res.end(); 
}); 
+0

이 부분은 흥미로운 것 같습니다. 그런데 어떻게 데이터를 전송할 수 있습니까? res.write는 오류를 발생시키고 res.send는 한 번 사용합니까 ?? 데이터를 배열로 스트리밍 할 때 데이터를 넣고 완료되면 보낼 수 있습니다. 그게 최고야? – user1175817

관련 문제