gpt4 book ai didi

javascript - 如何在不重启的情况下更新服务器的内容? (node.js)

转载 作者:数据小太阳 更新时间:2023-10-29 05:54:42 25 4
gpt4 key购买 nike

所以我有一个简单的 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);

现在,假设我想更新我的 HTML。
并进一步假设我不想重新启动服务器。
有办法实现吗?

我尝试导出零件以发送到外部文件,例如:

// lib.js
module.exports.message = 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.js
var app = require('express')();

app.get('/message/:poster', require('./lib.js').message)

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 次更新函数时间,甚至更好,因为我们在 Node 中,有一个事件监听器,用于更改包含函数的文件,并且随着函数的更改,事件触发并且缓存中的函数得到更新。
那么我们如何获得上述行为之一呢?或者是其他东西?我知道重启服务器可能只需要 100 毫秒,但重启它会中断所有当前事件的 websocket,这不是一个选项。
注意:我不想使用任何模板语言,如 jade、ejc 等。

最佳答案

通过请求一个模块,它的 module.exports 会被缓存,以供将来所有对 require 的调用。您可以以编程方式清空缓存:http://nodejs.org/docs/latest/api/globals.html#globals_require_cache .如果您还想在文件更改时执行此操作,您可以使用 fs.watch:http://nodejs.org/api/fs.html#fs_fs_watch_filename_options_listener .

关于javascript - 如何在不重启的情况下更新服务器的内容? (node.js),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28524862/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com