替换公共npm包中的函数

时间:2014-04-25 10:34:14

标签: javascript node.js package npm

所以我正在使用api包装器包再次使用api请求请求。在大多数设置中都可以正常工作。但我想在node-webkit环境中使用该包,并使用XHR代替请求模块。如果我重写模块,它将与API一起使用并起作用。但由于更新的舒适性,我不想这样做。所以分叉对我来说不是一个选择。是否可以在不更换模块的情况下更换模块中的一个功能。

var request = require('request');
var makeRequest = function(path, args, secure, callback, encoding) {
  var maxlen = 2048;

  var path = buildUrl(path, args);
  if (path.length > maxlen) {
    throw new Error("Request too long for google to handle (2048 characters).");
  }

  var options = {
    uri: (secure ? 'https' : 'http') + '://some.api.com' + path
  };

  if (encoding) options.encoding = encoding;
  if (config('proxy')) options.proxy = config('proxy');

  if (typeof callback === 'function') {
    request(options, function (error, res, data) {
      if (error) {
        return callback(error);
      }
      if (res.statusCode === 200) {
        return callback(null, data);
      }
      return callback(new Error("Response status code: " + res.statusCode), data);
    });
  }

  return options.uri;
};
module.exports = makeRequest;

所以现在我想在不改变makeRequest的情况下替换整个makeRequest函数的请求函数。基本上我想要覆盖这个功能。

编辑:添加代码示例。

1 个答案:

答案 0 :(得分:0)

查看rewireproxyquire,可以解决您的问题。

如果您使用的模块仅在内部使用makeRequest,我看不到任何其他解决方案,即使这样,只有在您需要的模块(文件)中需要makeRequest时才能使用。

但请记住,这可能很糟糕,通常只能用于测试。