所以我正在使用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函数的请求函数。基本上我想要覆盖这个功能。
编辑:添加代码示例。
答案 0 :(得分:0)
查看rewire或proxyquire,可以解决您的问题。
如果您使用的模块仅在内部使用makeRequest,我看不到任何其他解决方案,即使这样,只有在您需要的模块(文件)中需要makeRequest时才能使用。
但请记住,这可能很糟糕,通常只能用于测试。