2017-01-27 1 views
1

HTML 템플릿 (핸들 막대)에 인쇄하고 싶은 객체가 있습니다. 값은 mysql 서버의 카운트 쿼리입니다. 핸들 바의 herlper은 다음과 같습니다핸들 막대 헬퍼를 사용하여 JSON 객체를 인쇄하는 방법

router.get('/dashboard', getGrade7Applicants, function (req, res, next) { 
res.render('admission/dashboard', { 
    applications: { 
      'grade7': req._applications7 
    } 

}); 
}); 

: 결국 내

Handlebars.registerHelper('toJSON', function(object){ 
return new Handlebars.SafeString(JSON.stringify(object)); 
}); 

그리고 여기

function getGrade7Applicants(req, res, next) { 
connection.query('SELECT COUNT(*) FROM applications WHERE grade="Grade 7" ', function (err, rows, fields) { 
    if (err) { 
     return next(err); 
    }; 
    req._applications7 = rows; 
    return next(); 
}); 
} 

라우터 파일 내 GET 요청입니다 : 여기에 쿼리를 가지고있는 기능입니다 html 템플릿은 다음과 같습니다.

<div class="alert alert-success" role="alert"> 
      <p style="font-size:75px; text-align:center;">{{toJSON applications.grade7}}</p>    
      <p style="text-align:center;"><strong>7th GRADE Applications<strong> </p> 
     </div> 

이 모든 후, 내 웹 페이지의 출력은 입니다. [{ "COUNT (*)": 20}]

나는 왜 그것이 검색어의 일부를 인쇄하는지 잘 모릅니다. 20은 제가 인쇄하고 싶은 올바른 가치입니다.

답변

2

는 여기에 몇 가지 더 설명입니다

당신은 (내가 만들기 위해 결과의 이름을 계산 준 다음 쿼리가있는 경우 디스플레이 이상의 디스플레이 - 우대 :

당신이 그것을 캐릭터 라인 화 할 때

[{ 
    "result": "20" 
}] 

그래서, 당신은을 포함하여 전체 개체를 얻을 :

SELECT COUNT(*) as result FROM applications WHERE grade="Grade 7" 

이 같이 보입니다 결과 개체를 다시 얻어야한다 소품 이름과 괄호를 텍스트로 사용하십시오.

당신은 전체 배열에 전달하고 템플릿에 (당신이 무엇을) 그것을 통해 반복, 또는 수 있습니다 만 먼저 템플릿의 이름으로 속성에 액세스 요소 :

res.render('admission/dashboard', { 
    applications: { 
     'grade7': req._applications7[0] 
    } 
}); 

및 템플릿 :

{{#if applications}} 
    {{#if applications.grade7}} 
     {{applications.grade7.result}} 
    {{/if}} 
{{/if}} 

은 또한 단지 데이터 값을 직접 전달할 수 있습니다

res.render('admission/dashboard', { 
    applications: { 
     'grade7': req._applications7[0].result //prop name specified 
    } 
}); 

그리고 템플릿에 :

{{#if applications}} 
    {{#if applications.grade7}} 
     {{applications.grade7}} 
    {{/if}} 
{{/if}} 

특별한 이유가없는 한 도우미를 사용할 필요가 없습니다.

1

그건 쿼리의 일부가 아닙니다. 필드의 이름입니다. 필드 이름을 지정하지 않았기 때문에 단지 "count (*)"를 사용합니다.

Select count(*) as app_count from applications... 

그런 다음 당신은 그냥 값을 얻을 수 applications.gradet.app_count를 사용하여 값을 인쇄 할 수 있습니다 : 당신은 변경해야

당신은이 같은 작업을 할 수있는 이름을 포함하는 쿼리합니다.

나는 당신이 객체 속성의 값을 얻기 위해 그것을 다시 구문 분석해야하므로 객체를 문자열로 표현함으로써 달성하려는 것을 100 % 확신하지 못했습니다.

나는 핸들 바를 익숙하지 않아서 여기에서 당신을 잘못 이끌 수 있습니다. 속성 이름은 위에서 언급 한 바와 같이

관련 문제