2012-12-24 4 views
1

내가 생성 된 프로세스의 출력을 수집 어디 백엔드 NodeJS 코드가 :NodeJS 익스프레스 - 페이지 업데이트를 렌더링 자동으로

schild.stdout.on('data', function (data) { 
    var result = data.toString().split("\n"); 
    for(var i = 0; i < result.length; i++) 
    { 
      var n = result[i].split("|"); 
      if(n.length == 4) 
      { 
        var date = n[0]; 
        var category = n[1]; 
        var component = n[2]; 
        var condition = n[3]; 
        response.push({Date : date, Category : category, Component : component, Condition : condition}); 
      } 
    } 
    logger.info('Rendering : ' + response.length); 
    res.render('viewpage', {status:0, msg:'Success', responsedata:response}); 

을});

내 viewpage.ejs 파일은 코드 아래에 있습니다

var oTable = $('#example').dataTable({"bDestroy" : true, "bUseRendered": false, "bSort" : false, "bPaginate" : true, "bDeferRender": true, "iDisplayLength" : 27}); 
var status = <%= status %>; 
if(status == 2) 
{ 
alert('<%= msg %>'); 
} 
if(status == 0) 
{ 
<% for(var i =0; i < responsedata.length; i++){ %> 
     $('#example').dataTable().fnAddData(['<%= responsedata[i].Date %>', '<%= responsedata[i].Category %>' , '<%= responsedata[i].Component %>', '<%= responsedata[i].Condition %>']); 
<% } %> 
     oTable.fnDraw(); 
} 
     }); 

문제는 페이지가 'res.render'에 대한 첫 번째 호출에 대해서만 렌더링됩니다 있다는 것입니다하지만 난 더 출력과 함께 페이지를 업데이트 할 'schild.stdout.on'이벤트에서 캡처 됨. 내 logger statement 내에서 처음으로 응답 배열의 길이는 0이지만 올바르지 만 나중에 유효한 데이터를 가져 와서 뷰로 렌더링한다는 것을 알 수 있습니다. 그러나 페이지는 최신 데이터로 업데이트되지 않습니다. 페이지가 한 번만로드되고 페이지에서 더 이상 업데이트가 발생하지 않습니까?

답변

1

이 작업을 수행하려면 다른 디자인이 필요합니다. socket.io 같은 뭔가 서버에서 브라우저로 스트리밍 데이터에 도움이 될 수 있습니다,하지만 당신은의 라인을 따라 그것을 할 수 있습니다 : 빈 데이터와 socket.io을 처리하는 자바 스크립트와 기본 HTML 페이지를 렌더링

  1. 브라우저에서 자바 스크립트에서
  2. 는 socket.io 연결하고 데이터 스트림 요청 데이터가 avalable입니다 당신이 가진, 하나의 단위로 socket.io 메시지로 서버 서브 프로세스의 출력 data 이벤트를 변환하는 것과 유사한 코드를 사용
  3. 각 데이터 단위가 서버에서 도착할 때마다 브라우저에서 형식을 지정합니다. nto HTML을 테이블에 추가하십시오.
관련 문제