node.js – 如何使用jsdom / node-jquery来更新我的页面的外观?

似乎我所能find的所有文件都是关于“抄写人们的页面”的信息。 我想要使​​用jsdomnode-jquery来更新用户所在的页面。 我知道当我编写代码的时候,我只需要一个普通的<script>标签链接到公共目录中的JavaScript文件,但是我想学习如何从服务器上做到这一点,甚至是可能的。 我真正想要的是允许多个用户连接到一个页面,并为所有用户在一个用户执行操作时更新页面。 例如,button1将背景变成黑色。 button2将其变为红色,button3将其变成白色。 并纠正我,如果我错了,但我不认为这是可能的链接到一个JavaScript文件通过<script>标记。 所以看着jsdom

 jsdom.env({html: ???, src: jquery, done: callback }); 

好的,这是问题1 。 我不知道该怎么把html放在这个代码中来获得我的DOM对象,或者我可以做什么。 我的文件是用jade写的,所以我不能从文件中加载它们。 然后我开始考虑,也许我可以把这段代码放在代码的路由部分,并从reqvariables中获取html。 所以我开始玩我的路由代码:

 exports.index = function(){ res.render('index', {title: 'MyTitle'}); }; 

让我只是说,这个整个路由的事情已经让我头脑发热了。 我试图第二次res.render ,但这是行不通的。 这导致问题2 。 即使我可以获取DOM对象并操作它们,我也不知道如何将它们推回给客户端,因为执行第二个res.render不起作用。 更何况这样做会打败这个目的,因为如果我把它们重新渲染,我可能会把它们redirect到另一个页面。

我打算使用socket.io来处理用户连接,所以也许关键在于那里。 也许我可以设置一个socket.on('button_click', function(){ ... }); 但我不知道该怎么把这个函数放在DOM中来处理和更新DOM,或者在客户端如何让button发出'button_click'因为客户端不能访问socket.iovariables。

所以如果有人能帮我解释一下这些东西,那么这个例子会非常棒。 我真的试图想出所有这些,我花了几天的时间研究和阅读node.js,express.js,socket.io,jsdom和node-jquery的API文档。 看来,我发现的所有例子都是非常基础的,只是他们自己的领域而已,没有任何事例可以把它们联系在一起。

你会有点尴尬的方向。

首先,如果你使用了jade,它使用jade编译器编译成html。

其次,一旦你编译了它,你可以将它推入到jsdom中,因为它使用了html5parsing器,然后你可以通过正常的DOM apis来操纵它。

第三,您无法直接访问客户浏览器中的DOM。 通常,人们执行类似于共享同步视图的方式是使用socket.io并将数据事件传输到每个客户端,在那里编写客户端JavaScript来解释这些事件并在UI中进行必要的更改。 您正在发送一组HTML和引导每个客户端的JavaScript – 很less人会在服务器的内存中保留完整的DOM,然后尝试更新并将更改广播到客户端。 你可以做到这一点,我只是不会推荐它。 不是通常情况下结构如何。

第四,这里第一次这样做很复杂。 我build议看看像todomvc客户端mvc框架比较应用程序 – http://addyosmani.github.com/todomvc/ 。 看看每一个的来源,包括简单的旧的JavaScript版本。 这会教你足够的了解客户端的一部分。 然后你可以想象使用像socket.io这样的东西来更新你的模型,并build立依赖于这些模型的变化事件的视图。 你可以在没有mvc的情况下完成所有这些工作,但是它教会了你很好的分离问题,以便学习人们如何构build这些types的应用程序。