有没有一种方法可以在不重新启动服务器的情况下刷新静态文件?

时间:2019-06-07 16:48:11

标签: javascript node.js

我简单的Node.js应用提供了静态文件,例如html / txt

app.use(express.static('public'))

我想在不重新启动应用程序的情况下反映对这些文件的更改。 即希望能够将任何txt / help / read.me静态文件修改为客户端可以立即使用,而无需重新启动应用程序。我该怎么办?

2 个答案:

答案 0 :(得分:0)

要确定文件是否已更改,可以使用内置fs.watch模块中的fs。它的工作方式如下:fs.watch('filename_or_directory', function(event, file) {})。回调的第一个参数是“事件”,这是一个字符串,可以是“重命名”或“更改”,取决于发生的更改类型。第二个参数是更改的文件名。

让客户端自动知道服务器上已发生更改,这要复杂一些。需要与服务器进行某种形式的通信。您可以通过轮询或Web套接字来实现。如果使用套接字路由,则可以使用诸如socket.iows之类的库在服务器和客户端之间建立连接。当服务器注意到fs.watch中文件的更改时,它可以将该更改作为JSON“事件对象”广播给所有客户端,然后客户端可以接收消息并确定如何继续(重新加载当前页面,请求通过AJAX更新数据,请忽略它,因为它是不相关的文件,等等。

如果您使用轮询路线,则不需要任何Web套接字库。您只需跟踪fs.watch中每个更改在一个数组中的时间戳,然后设置一个/api/getChanges之类的路由。您让客户端每隔一定的时间就将最后一次客户端更新的时间戳发布到该路由,并且服务器可以在该时间之后响应数组中的所有更改对象。

注意:Express不需要知道文件已更改。它将根据要求重新读取文件。客户端需要知道何时刷新。

答案 1 :(得分:0)

以这种方式解决:

app.use(express.static('public’, {etag: false}))