2012-10-31 117 views
2

从node.js服务器向客户端的javascript发送一些数据(理想情况下为json对象的形式)的最佳方式是什么?我想到了一些选择,但我认为它们都不适合。第二个意见,或其他一些建议是我正在寻找的。从node.js向客户端js发送数据的最佳方式

  1. 让服务器在<script>标记中输出一些代码来设置全局变量。

    我以前用过这个,但我不喜欢它的想法,主要是因为它对XSS有潜力,而且我认为这是不好的做法,即使发送的数据不是由用户定义的。

  2. 用它里面的数据设置一个cookie。

    这个选项稍微好一点,但由于数据可能会因为每次页面加载而改变(至少在我的设置中),它并不适合,因为在我看来,cookie不应该是这个不稳定。

  3. 让客户端javascript在页面加载时向服务器发出ajax请求以请求json文件。

    这也适用,但它增加了很多不必要的开销。每页2个请求看起来没有必要。

背景:

我有2个模板网站对注销的用户的索引,主要内容模板。

我的服务器端是由node.js,express.js,jade等构建而成的。

我使用history.pushState作为客户端页面路由的所有链接和crossroads.js。 我希望能够发送加载的模板和用户的ID /如果他们登录到客户端JavaScript,所以它可以处理相应的页面更改。登出的用户可以查看内容页面,而无需编辑权限,点击某些链接应该将它们带回索引模板。

回答

1

<script>标记方法很好。如果您担心访问数据的其他脚本,则不用设置全局变量,而是在可以接受数据的客户端js代码中编写函数。

所以不是发生:

<script> 
    data = { foo : "bar" } 
</script> 

产生这样的:

<script> 
    setData({ foo : "bar" }); 
</script> 

很显然,我不认为我需要告诉你,你产生的任何数据应通过适当的序列化JSON序列化程序以避免语法错误等。

+0

我确实结束了脚本标记选项。访问js的其他脚本不是问题,因为发送给客户端的内容可能是恶意的。 我正在使用'JSON.stringify(object).replace('/','\ /','g')'来使任何XSS都不可能(据我所知)。 – xthexder

0

而是阿贾克斯你可以实现与任何Socket.ioNow的WebSockets(实现socket.io。这些不仅可以让您轻松地传递数据来回客户端和服务器之间,也可以让客户端调用的函数服务器

+0

我没有看到使用套接字进行一次性传输的好处。我目前正在使用REST设置,因为我的页面不需要实时更新。 – xthexder

+0

最好的方法是将数据输出到脚本标记中,减少1个Web请求。以为我会提供其他的选择,因为我不知道这是一个简单的请求。 –

1

只需将类型为“text/template”或“application/json”的<script>标签中的一次性数据括起来,并确保它们具有ID,使用jQuery或标准DOM方法访问其内容。数据,你可以使用data-*属性关键元素。

相关问题