2017-11-20 1 views
-1

나는 expresss js 프레임 워크와 Handlebarsjs를 템플릿 엔진으로 사용하고 있습니다. 내가보기에 라우터에서 배열을 보내고 스크립트 태그 안에서버에서받은 배열을 스크립트 변수에 저장하는 방법

//users is an array 
res.render('chatRoom',{users:users}); 

내 chatRoom.hbs을이 배열을 저장할

<script> 
var users= {{ users }} 
console.log(users); 
</script> 

나는 이런 식으로 뭔가를 할 노력하고있어하지만, 이 오류가 발생합니다

SyntaxError: identifier starts immediately after numeric literal 

도움말하십시오.

+0

도움을 받으려면 A) 사용자가 첫 번째 코드 블록에있는 내용, B) 실제로 브라우저에 보낸 내용 ** 등을 확인해야합니다. (.hbs 소스가 아닙니다.). –

+0

@ 그 배열 몽고의 DB로부터 자궁강 T.J.Crowder [{_id : 5a12ba6ecb260717d3fd1ade, socket_id 'NzAv4BVyARp5AGizAAAA' 닉네임 '데스' __v : 0}] –

답변

0

json으로 출력 할 수 있습니다.

두 가지 방법이 있습니다. 먼저 볼 수있는 JSON 문자열을 반환 :

res.render('chatRoom',{users:users, usersJson:JSON.stringify(users)}); 

그런 다음에 chatRoom.hbs 다음을 사용할 수 있습니다 {{{ }}}는 트리플 중괄호

주 -이 문자가되는 것을 방지이 HTML에 대한 '탈출'을

<script> 
    var users = {{{ usersJson }}} 
    console.log(users); 
</script> 

또는 도우미를 등록 할 수 있습니다.

Handlebars.registerHelper('toJSON', function(obj) { 
    return JSON.stringify(obj); 
}); 

그런 다음에 chatRoom.hbs 당신은 무엇을 당신이해야 할 것은 다음 JSON 문자열과 같은 속성에 어딘가에 데이터를 입력하는 것입니다,하는 HTML 인젝션 ("XSS")을 일으킬 수 트리플 괄호를 사용

<script> 
    var users = {{{ toJSON users }}} 
    console.log(users); 
</script> 
0

을 사용할 수 있습니다 스크립트에서 구문 분석 :

먼저 도우미 기능 등록 :

Handlebars.registerHelper('json', function(context) { 
    return JSON.stringify(context); 
}); 

를 속성에 데이터를 넣어

<div id="users-source" data-users='{{ json user }}'></div> 
<script> 
    var users = JSON.parse($('#users-source').attr('data-users')); 
    console.log(users); 
    // OR directly 
    var users = $('#users-source').data('users'); 
    console.log(users); 
</script>