如何让Node重新处理/ etc / hosts?

时间:2014-05-29 00:50:37

标签: 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;
  }

  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在没有重启过程的情况下查看更新的主机文件

1 个答案:

答案 0 :(得分:0)

我知道这已经很晚了,但我想这与环境变量类似,可能会加载和缓存主机文件信息。出于同样的原因,您必须重新启动软件以便注意那些新的env变量,您可能需要终止节点进程并重新启动它以获取新的主机条目。如果您安装pm2之类的内容,则会稍微调整一下初始启动命令:pm2 start app.js而不是node app.js。然后每次更新您的主机文件时,请终止您的应用程序,pm2将重新启动它。杀死您的应用就像process.kill()process.exit()一样简单,或者抛出错误。