【问题标题】:How do I refresh browser from server-side with node.js?如何使用 node.js 从服务器端刷新浏览器?
【发布时间】:2020-05-23 17:32:36
【问题描述】:

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

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


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

  • Node.js
  • 快递
  • webpack-dev-middleware

【问题讨论】:

  • 我真的不需要解决问题,我打算通过手动刷新来解决,但我还不知道如何从服务器刷新浏览器..
  • 也许我可以创建一些事件并将其传递给客户端 js,在那里我将刷新页面?
  • 我猜你正在寻找 nodemon 。尝试使用 NPM 安装 nodemon。如果我误解了你,请纠正我。
  • 不行,我需要刷新浏览器,而不是重启服务器

标签: node.js express webpack server webpack-dev-middleware


【解决方案1】:

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

服务器发送事件:

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

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

在服务器端,为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');
}

现在服务器可以随时发送刷新事件,只需调用sendRefresh()

精简服务器:

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

【讨论】:

  • 我今天会试试这个。非常感谢,我想这是我需要的。是的,我需要本地服务器来进行开发。
  • 这个方法对你有用吗?如果有,你能接受我的回答吗?
  • 对不起..我忘了。准备好。非常感谢
  • 只需确保在每条消息的末尾使用双 \n,因为它需要一个空行来检测消息已完全发送:res.write('you are subscribed\n\n'); & res.write('data: refresh\n\n'); developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-25
  • 1970-01-01
  • 2011-02-04
  • 1970-01-01
相关资源
最近更新 更多