Javascript 如何将从服务器接收的数组存储在脚本变量中

Javascript 如何将从服务器接收的数组存储在脚本变量中,javascript,node.js,express,handlebars.js,Javascript,Node.js,Express,Handlebars.js,我使用ExpressJSFramework和Handlebarsjs作为模板引擎。 我想从路由器向视图发送一个数组,并将该数组存储在脚本标记中 //users is an array res.render('chatRoom',{users:users}); 还有我的聊天室 <script> var users= {{ users }} console.log(users); </script> 请提供帮助。您可以将其输出为json 有两种方法可以做到这一点。 首先,

我使用ExpressJSFramework和Handlebarsjs作为模板引擎。 我想从路由器向视图发送一个数组,并将该数组存储在脚本标记中

//users is an array
res.render('chatRoom',{users:users});
还有我的聊天室

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

请提供帮助。

您可以将其输出为json

有两种方法可以做到这一点。 首先,在视图中返回json字符串:

res.render('chatRoom',{users:users, usersJson:JSON.stringify(users)});
然后,在您的
聊天室.hbs
中,您可以使用:

请注意三个大括号
{{{}}
——这可以防止字符被HTML“转义”

<script>
  var users = {{{ usersJson }}}
  console.log(users);
</script>
然后,在您的
聊天室.hbs
中,您可以使用

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

var users={{{toJSON users}}}
console.log(用户);

使用三个大括号可能会导致HTML注入(“XSS”),您需要做的是将数据作为json字符串放在属性中的某个位置,然后在脚本中解析它:

首先注册辅助函数:

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>

var users=JSON.parse($('#users source').attr('data-users'));
console.log(用户);
//或者直接
var users=$('#users source')。数据('users');
console.log(用户);

为了帮助您实现这一点,我们需要知道A)第一个代码块中的
用户是什么,B)实际发送到浏览器的页面是什么样子的(不是.hbs源)。@T.J.Crowder是从mongo db检索的数组[{id:5a12ba6ecb260717d3fd1ade,套接字id:'NzAv4BVyARp5AGizAAAA',昵称:'Des','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>