我正在尝试编写一个简单的应用程序来监视文件更改并自动在浏览器中重新加载更新的代码。我知道livereload nodeamon和其他人的存在,我只想写自己的。我创建了服务器,让它读取我想要读取的文件,称为观察者,当观察文件发生变化时,它会杀死并重新启动服务器。最后一部分:它应该刷新浏览器。这怎么可能?
答案 0 :(得分:4)
正如其他人所解释的那样,浏览器编程环境因此window.location.reload()
与node.js完全分开,因此您无法直接从node.js调用它。服务器端代码在node.js中的服务器上运行。浏览器中的客户端代码仅在浏览器中运行。这两者可以通过Ajax请求或通过webSocket连接发送的消息进行通信,但是它们不能直接相互调用代码。
对于基于服务器上发生变化的内容进行刷新的浏览器,有两种基本方法。
浏览器中的Javascript可以定期询问服务器是否有新内容(通常使用传递时间戳的Ajax调用)。如果服务器说自那个时间戳以来有新的东西,那么浏览器中的Javascript可以请求新的数据/文件。这种“轮询”方法并不是特别有效,因为如果数据不经常变化,那么大多数新事物的请求将只返回没有新的东西。它对电池续航时间也不友好。
浏览器可以与服务器建立持久的webSocket连接。然后,当服务器发现服务器上发生了某些变化时,它可以直接向每个连接的浏览器发送通知,通知它有新的东西。然后,接收此消息的所有连接客户端都可以进行正常的Ajax调用以检索新数据。或者,新信息可以通过webSocket直接发送到客户端。在任何一种情况下,这种直接通知通常比“轮询”解决方案更有效。
使用webSocket选项,您不希望服务器重新启动,因为这会丢弃所有webSocket连接。我不确定为什么你当前正在重新启动服务器,但是你必须改变它以使用webSocket解决方案。
答案 1 :(得分:3)
NodeJS没有代表全局命名空间的window
变量。相反,它有一个名为global
的变量。
NodeJS中没有浏览器,窗口或URL位置。
它是纯粹的服务器端工具。
答案 2 :(得分:1)
在node.js中,您有process
,这是一个node.js全局对象,如window
,它是一个浏览器全局对象。
有关更多信息,请在node.js shell中输入process
。