从node.js发送数据到客户端js的最佳方法

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

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

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

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

    这个选项稍微好一点,但是由于每次页面加载的数据都可能会发生变化(至less在我的设置中),但这并不适合,因为在我看来,cookies不应该是这种易变的。

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

    这同样适用,但会增加很多不必要的开销。 每页2个请求似乎没有必要。

背景:

我有一个网站有2个模板:一个login用户的索引和主要内容模板。

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

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

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

所以,而不是生成:

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

生成这样的东西:

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

显然,我不认为我需要告诉你,你生成的任何数据应该由一个适当的JSON序列化程序序列化,以避免语法错误等。

只需将一次性数据放在types为“text / template”或“application / json”的<script >标记中,并确保它们具有ID。 使用jQuery或标准的DOM方法访问他们的内容。 对于较短的数据位,可以在关键元素上使用data-*属性。

你可以使用Socket.io或Now (它实现了socket.io)来实现websockets,而不仅仅是允许你在客户端和服务器之间来回传递数据,而且允许客户端调用服务器上的函数