Javascript 如何更新服务器';在不重新启动的情况下恢复内容?(node.js)

Javascript 如何更新服务器';在不重新启动的情况下恢复内容?(node.js),javascript,node.js,express,Javascript,Node.js,Express,因此,我有一个简单的node.js服务器,它只提供动态内容: // app.js var app = require('express')(); app.get('/message/:poster', function(request, response) { response.writeHeader(200, {'content-type': 'text/html'}); // some database queries response.end(""+

因此,我有一个简单的node.js服务器,它只提供动态内容:

// app.js
var app = require('express')();

app.get('/message/:poster', function(request, response) {
    response.writeHeader(200, {'content-type': 'text/html'});

    // some database queries

    response.end(""+
    "<!DOCTYPE html>"+
    "<html>"+
        "<head>"+
            "<title>messages of "+request.params.poster+"</title>"+
            "<script src='http://example.com/script.js'></script>"+
            "<link rel='stylesheet' href='http://example.com/style.css'>"+
        "</head>"+
        "<body>"+
        "" // and so on
    );
})

app.listen(2345);
它可以工作,但如果我更新lib.js,它不会更新。它似乎在复制该功能。
然后我试着

// app.js
var app = require('express')();

app.get('/message/:poster', function(request, response) {
    require('./lib.js').message(request, response);
})

app.listen(2345);
但这也不会更新。
似乎该函数会一直被缓存和重用(一旦启动服务器)。我敢说,必须有一种方法来设置它,以便它可以每次重新验证函数(检查包含它的文件是否更改),如果是,则更新其缓存,或者我们可以将它设置为每n次更新函数,或者更好,因为我们在节点中,有一个事件监听器,用于更改包含函数的文件,并在函数更改时触发事件并更新缓存中的函数。
那么,我们如何获得上述行为之一?还是别的什么?我知道重新启动服务器可能只需要100毫秒,但重新启动它会中断所有当前活动的WebSocket,这不是一个选项。

注意:我不想使用任何模板语言,如jade、ejc等。

如果您不想在生产中丢失任何请求,请使用PM2、Forever等优雅地重新启动您的应用程序。 如果您想在开发中自动应用更改,请使用Nodemon。
我不知道您不喜欢重新启动应用程序的任何其他原因。

将内容导出到其他模块似乎是解决此要求的好方法。但问题是:模块只实例化一次并缓存以供以后的请求使用,这就是为什么在更新lib.js时它不会反映更新的内容

您正在寻找的是热加载node.js模块的一种方法,它可以在每次模块更改时获得新的模块实例。你可以用

对于要跟踪更改的任何模块:

module.change_code = 1;

通过要求一个模块,它的
module.exports
将被缓存,以便将来调用
require
。您可以通过编程方式清空缓存:。如果您还想在文件更改时执行此操作,您可以使用
fs.watch
:。

您能不能不使用NodeJ的读/写API

请求->读取文件->向客户端发送内容


至少对于html这样的静态内容。

它确实会重新加载,WebSocket也会丢失并非所有服务器端应用程序都是PM2的“零秒停机”所使用的那种……只需使用fs.readFile()而不是require()
// app.js
var app = require('express')();

app.get('/message/:poster', function(request, response) {
    require('./lib.js').message(request, response);
})

app.listen(2345);
require('hotswap');
module.change_code = 1;