我寫的NodeJS如下的簡單和工作的Web服務器上的文件發生更改時重新啓動Web服務器:配置使用的NodeJS
var http = require("http");
var fs = require("fs");
console.log("Web server started");
var config = JSON.parse(fs.readFileSync("./private/config.json"));
var server = http.createServer(function(req,res){
console.log("received request: " + req.url);
fs.readFile("./public" + req.url,function(error,data){
if (error){
// Not sure if this is a correct way to set the default page?
if (req.url === "/"){
res.writeHead(200,{"content-type":"text/plain"});
res.end("here goes index.html ?");
}
res.writeHead(404,{"content-type":"text/plain"});
res.end(`Sorry the page was not found.\n URL Request: ${req.url}`);
} else {
res.writeHead(200,{"content-type":"text/plain"});
res.end(data);
}
});
});
現在,我想我的Web服務器重新啓動,並聽取了新的端口時,端口號配置文件中的更改。所以我添加下面的代碼:
fs.watch("./private/config.json",function(){
config = JSON.parse(fs.readFileSync("./private/config.json"))
server.close();
server.listen(config.port,config.host,function(){
console.log("Now listening: "+config.host+ ":" +config.port);
});
});
這工作得很好,當我改變配置文件中的端口,我可以訪問新的端口上我的Web服務器。但是,我也可以在以前的端口上訪問它。在我聽新端口之前,我以爲我正在關閉前一個端口上的Web服務器。我錯過了什麼?
我感謝你的幫助:)
我的2美分,描述https://nodejs.org/api/net.html#net_server_close_callback,它停止接受新連接,並保持現有的連接。 –
我認爲'keep-alive'導致服務器不關閉連接, –
爲什麼不使用nodemon代替 – UchihaItachi