因此,对于单元测试,我需要将域重定向到特定计算机的新IP。我已在节点中设置路由以更新计算机的主机文件。
exports.hosts = function hosts(req, res) {
var domain = req.params.domain;
var ip = req.params.ip;
if (domain === 'localhost') {
res.json(500, {message: 'invalid domain'});
return;
}
async.waterfall([
function (callback) {
fs.readFile('/etc/hosts', callback);
},
function (data, callback) {
// Remove existing entry
var lines = data.toString().split('\n');
data = '';
for (var line in lines) {
if (!_str.endsWith(lines[line], domain) && lines[line]) {
data += lines[line] + '\n';
}
}
callback(null, data);
},
function (data, callback) {
if (ip) {
data += ip + ' ' + domain + '\n';
}
callback(null, data);
},
function (data, callback) {
fs.writeFile('/etc/hosts', data, callback);
}
],
function (err) {
if (err) {
res.json(500, err);
} else {
res.send(200);
}
});
};
编辑工作正常。问题是我从节点进程下一次调用域仍然转到最后一个IP地址。如果我重新启动Node,它会在hosts文件中看到新的IP地址。
如何让Node在没有重启过程的情况下查看更新的主机文件?
答案 0 :(得分:0)
我知道这已经很晚了,但我想这与环境变量类似,可能会加载和缓存主机文件信息。出于同样的原因,您必须重新启动软件以便注意那些新的env变量,您可能需要终止节点进程并重新启动它以获取新的主机条目。如果您安装pm2之类的内容,则会稍微调整一下初始启动命令:pm2 start app.js
而不是node app.js
。然后每次更新您的主机文件时,请终止您的应用程序,pm2将重新启动它。杀死您的应用就像process.kill()
,process.exit()
一样简单,或者抛出错误。