如何使用node.js从服务器端刷新浏览器?

zer*_*dox 3 node.js express webpack server webpack-dev-middleware

由于 html-webpack-plugin 和 webpack-dev-middleware (webpack-hot-middleware) 互操作中的 HMR 错误,我想在 html 文件更改(开发时)时重新加载页面。

这是我遇到此问题的两个存储库,两个存储库都存在问题。


如何使用此工具重新加载页面?

  • Node.js
  • 表达
  • webpack-dev-中间件

ter*_*rse 6

有几种方法可以从服务器刷新客户端的浏览器。

服务器发送的事件:

一种适用于浏览器和服务器的简单方法是使用服务器发送事件。最小的过程是:

  1. 客户端使用EventSource()向服务器发送订阅请求:
var evtSource = new EventSource("<server_URL>/subscribe");
Run Code Online (Sandbox Code Playgroud)
  1. 客户端为传入的消息设置一个监听器:
evtSource.onmessage = function () { myPageRefresh() };
Run Code Online (Sandbox Code Playgroud)

在服务器端,为GET /subscribe请求设置一个处理程序并跟踪订阅的客户端:

var client = null;
app.get('/subscribe', (req, res) => {
  // send headers to keep connection alive
  const headers = {
    'Content-Type': 'text/event-stream',
    'Connection': 'keep-alive',
    'Cache-Control': 'no-cache'
  };
  res.writeHead(200, headers);

  // send client a simple response
  res.write('you are subscribed');

  // store `res` of client to let us send events at will
  client = res;

  // listen for client 'close' requests
  req.on('close', () => { client = null; }
});

// send refresh event (must start with 'data: ')
function sendRefresh() {
  client.write('data: refresh');
}
Run Code Online (Sandbox Code Playgroud)

现在,服务器可以通过简单地调用 随时发送刷新事件sendRefresh()

精简服务器:

如果您在开发计算机上本地运行服务器,则刷新浏览器非常容易。lite-server是一个模块,它会在检测到源文件发生更改时刷新浏览器。它非常方便。

  • 只需确保在每条消息的末尾使用双“\n”,因为它需要一个空行来检测消息是否已完全发送:“res.write('you are subscribed\n\n');” &amp; `res.write('数据:刷新\n\n');` https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#sending_events_from_the_server (2认同)