2017-11-20 18 views
-1

私は、express 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

@そのアレイはMongoのDBからretrived T.J.Crowder [{_id:5a12ba6ecb260717d3fd1ade、 socket_id 'NzAv4BVyARp5AGizAAAA' ニックネーム: 'デ'、 __v:0}] –

答えて

0

jsonとして出力できます。

これには2つの方法があります。 まず、あなたのビューで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> 
01をお使いのデータを入れて
関連する問題