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

How can I access the browser's window object from a nodejs application?

本文关键字:窗口 对象 浏览器 访问 nodejs 应用程序      更新时间:2023-09-26

我想写一个简单的应用程序来监视文件的变化,并在浏览器中自动重新加载更新后的代码。我知道存在的liverload nodeamon和其他人,我只是想写我自己的。我已经创建了服务器,让它读取我想要读取的文件,称为监视程序,当监视文件发生变化时,它会杀死并重新启动服务器。最后一部分:刷新浏览器。这怎么可能呢?

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


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

  1. 浏览器中的Javascript可以定期询问服务器是否有任何新内容(通常通过传递时间戳的Ajax调用)。如果服务器说在那个时间戳之后有新的东西,那么浏览器中的Javascript就可以请求新的数据/文件。这种"轮询"方法不是特别有效,因为如果数据不经常更改,那么大多数对新内容的请求将返回没有任何新内容。

  2. 浏览器可以与服务器建立持久的webSocket连接。然后,当服务器发现服务器上的某些内容发生了变化时,它可以直接向每个连接的浏览器发送通知,通知它有新的内容。然后,接收此消息的所有已连接的客户端都可以进行普通的Ajax调用来检索新数据。或者,新的信息可以直接通过webSocket发送给客户端。在任何一种情况下,这种直接通知通常比"轮询"解决方案更有效。

使用webSocket选项,您将不希望服务器重新启动,因为那会丢失所有的webSocket连接。我不知道为什么你现在重启服务器时,一些变化,但你将不得不改变,使用webSocket解决方案。

NodeJS没有一个代表全局命名空间的window变量。相反,它有一个名为global的变量。

NodeJS中没有浏览器、窗口或URL地址。

在node.js中,您有process,这是一个node.js全局对象,如window,这是一个浏览器全局对象。

在node.js shell中输入process