如何从nodejs应用程序访问浏览器的窗口对象?

我正在尝试编写一个简单的应用程序来监视文件更改并自动重新加载浏览器中更新的代码。 我意识到livereload nodeamon和其他人的存在,我只是想写我自己的。 我创build了服务器,让它读取我想要读取的文件,称为观察者,当观察文件发生变化时,观察者将杀死并重新启动服务器。 最后一部分:它应该刷新浏览器。 这怎么可能?

NodeJS没有表示全局名称空间的windowvariables。 相反,它有一个名为globalvariables。

NodeJS中没有浏览器,窗口或URL位置。

这是一个纯粹的服务器端工具。

正如其他人所说,浏览器编程环境,因此window.location.reload()是完全独立于node.js,所以你不能直接从node.js调用。 服务器端代码在node.js的服务器上运行。 浏览器中的客户端代码仅在浏览器中运行。 两者可以通过Ajax请求或通过webSocket连接发送的消息进行通信,但是它们不能直接调用对方的代码。


要使浏览器根据服务器上发生的变化进行刷新,有两种基本方法。

  1. 浏览器中的Javascript可以定期询问服务器是否有新的东西(通常使用通过时间戳的Ajax调用)。 如果服务器说自从该时间戳以来有新的东西,那么浏览器中的Javascript可以请求新的数据/文件。 这种“轮询”方法并不是特别有效,因为如果数据不经常改变,那么大多数对新事物的请求将只是返回,没有什么新意。 这对电池寿命也不友好。

  2. 浏览器可以使服务器持久的webSocket连接。 然后,当服务器发现服务器上发生了某些变化时,它可以直接向每个连接的浏览器发送通知,通知它有新的东西。 所有接收到此消息的已连接客户端都可以进行正常的Ajax调用来检索新数据。 或者,新的信息可以通过webSocket直接发送到客户端。 在这两种情况下,这种直接通知通常比“投票”解决scheme更有效。

使用webSocket选项,您不会希望服务器重新启动,因为这将丢弃所有webSocket连接。 我不确定为什么当你改变某些东西时你正在重新启动服务器,但是你必须改变它来使用webSocket解决scheme。

在node.js中,你有一个process ,它是一个node.js全局对象,就像浏览器的全局对象window一样。

有关更多信息,请键入node.jsshell程序。