Node.js 如何让节点重新处理/etc/hosts?
因此,对于单元测试,我需要将域重定向到特定机器的新IP。我已经在节点中设置了一个路由来更新机器的主机文件Node.js 如何让节点重新处理/etc/hosts?,node.js,Node.js,因此,对于单元测试,我需要将域重定向到特定机器的新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;
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地址。如果我重新启动节点,它会在主机文件中看到新的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);
}
});
};
如何让节点在不重新启动进程的情况下查看更新的主机文件?我知道这已经晚了,但我认为与环境变量类似,主机文件信息可能会被加载和缓存。出于同样的原因,您必须重新启动软件才能注意到这些新的env变量,您可能需要终止节点进程并重新启动它以获取新的hosts条目。如果您安装了类似的东西,您将稍微调整初始启动命令:
pm2 start app.js
而不是node app.js
。然后,每次你更新你的主机文件,杀死你的应用程序和pm2将重新启动它。杀死你的应用程序就像process.kill()
,process.exit()
,或者抛出错误一样简单