为什么不是我的variables更新?

我在我的代码下面有一个问题,我的configvariables正在某些区域进行更新,但在http.createServer中的function,它不会改变。 我有一些意见,以表明在下面的代码中发生了什么。 我的猜测是configuration被保存到某个地方,或者我不明白JavaScript范围以及我想。 任何人都可以解释这里发生了什么?

编辑:它看起来像发生了什么事是客户端和服务器保持打开的套接字,因为Connection: keep-alive头。 目前(因为这是一个本地服务器stream量低),我已经添加res.setHeader('Connection','close'); 这似乎解决了在configuration更改后使用同一个客户端在短时间间隔内连接的问题。

 // global variables & configuration var fs = require('fs'); var utils = require('./utils.js'); var configFile = 'config.json'; var initialConfig = JSON.parse(fs.readFileSync(configFile)); var server = {}; // watch file system for changes to configuration fs.watchFile(configFile, function(curr, prev) { console.log('config change detected'); // reload the configuration var config = JSON.parse(fs.readFileSync(configFile)); // config is correct if (typeof server !== 'undefined') { server.close(); } serveStatic(config); }); // start the server serveStatic(initialConfig); // server functions function serveStatic(config) { var http = require('http'); // config is the new (correct) value var startTime; server = http.createServer(function(req, res) { // config is the old value, never changes try { // solution: res.setHeader('Connection','close'); res.end(JSON.stringify(config)); } catch (err) { if (res.statusCode === 200) res.statusCode = 500; res.write(http.STATUS_CODES[res.statusCode]); if (config.detailed_errors) res.write('\n' + err); res.end(); } }); console.log('Starting server on port ' + config.port); server.listen(config.port); } 

你的问题是与server.close 。 检查这个问题 , 这一个

server.close()

但是,这只会阻止服务器接收任何新的http连接。 它没有closures任何仍然打开。 http.close()需要一个callback,并且该callback不会被执行,直到所有打开的连接实际上断开连接。 有没有办法强制closures一切?

发生什么事是你可能正在创build多个服务器,因为连接尚未断开。 我不认为这个variables没有改变。 我已经testing了你的代码,当文件被改变的时候,有多个服务器被创build(在不同的端口上)。 所以你真正的问题是要正常closureshttp服务器立即在问题链接回答。