2014-04-25 1 views
0

그래서 api 요청에 대한 요청을 다시 사용하는 api wrapper 패키지를 사용하고 있습니다. 대부분의 설정에서 잘 작동합니다. 하지만 노드 - 웹킷 환경에서 해당 패키지를 사용하고 요청 모듈 대신 XHR을 사용하고 싶습니다. 그것은 API와 함께 작동하고 모듈을 다시 작성하면 작동합니다. 하지만 나는 업데이트의 편안함 때문에 그것을하고 싶지 않습니다. 포킹은 나를위한 선택 사항이 아닙니다. 모듈을 교체하지 않고 모듈의 한 기능을 대체 할 수 있습니까?공용 npm 패키지의 기능을 바꿉니다

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

일부 코드 (예 : 패치 할 기능)를 제공하면 대답하기가 쉽습니다. – hereandnow78

답변

0

rewire 또는 proxyquire을 보시면 문제를 해결할 수 있습니다.

사용하는 모듈이 내부적으로 만 makeRequest를 사용하는 경우 다른 솔루션이 표시되지 않으며 필요한 경우에도 모듈 (파일) 내에서 makeRequest가 필요한 경우에만 작동합니다.

그러나 이것은 일반적으로 잘못되었을 수도 있으므로 일반적으로 테스트를 위해서만 사용해야합니다.

+0

이 솔루션을 살펴보고 문제가 해결되기를 바랍니다. 그렇지 않으면 나쁘지 않은 모듈을 다시 작성해야하지만 모듈의 업데이트 가능성을 잃어 버리는 것은 싫다. – Spectator

관련 문제