2014-10-10 5 views
1

일부 게시물을 가져올 노드 모듈을 만들려고하지만 정의되지 않은 오류가 발생합니다.노드 모듈 반품 반환되지 않음

하는 index.js

var request = require('request'); 

function getPosts() { 

    var options = { 
    url: 'https://myapi.com/posts.json', 
    headers: { 
     'User-Agent': 'request' 
    } 
    }; 

    function callback(error, response, body) { 
    if (!error && response.statusCode == 200) { 
     return JSON.parse(body); 
    } 
    } 

    request(options, callback); 
} 

exports.posts = getPosts; 

테스트 /하는 index.js

var should = require('chai').should(), 
    myModule = require('../index'); 

describe('Posts call', function() { 
    it('should return posts', function() { 
    myModule.posts().should.equal(100); 
    }); 
}); 

나는 무엇을 놓치고? 오타 후 편집

+0

'getPosts'는 아무 것도 반환하지 않습니다 – naomik

답변

2

===가 ===에게 수정되었습니다 콜백이 작동하는 방법 당신이 실제로 "수"없는 것

보인다.

정의한 콜백은 비동기 적으로 실행되므로 실제로 시도하는 방식으로 값을 반환하는 데 실제로 사용할 수 없습니다. 이를 수행하는 방법은 getPosts() 함수가 실제로 다른 함수를 받아들이도록하는 것인데, 이는 호출 코드가 신경 쓰는 콜백입니다. 그래서 테스트는 다음과 같이 보일 것입니다 :

describe('Posts call', function(){ 
    it('should have posts', function(done){ 
    myModule.posts(function(err, posts){ 
     if(err) return done(err); 
     posts.should.equal(100); 
     done(); 
    }); 
    } 
}); 

는 모듈 코드는 그것을 지원하기 위해이 같은 것입니다 :

var request = require('request'); 

function getPosts(callback) { 

    var options = { 
    url: 'https://myapi.com/posts.json', 
    headers: { 
     'User-Agent': 'request' 
    } 
    }; 

    function handleResponse(error, response, body) { 
    if (!error && response.statusCode == 200) { 
     return callback(null, JSON.parse(body)); 
    } 
    return callback(error); // or some other more robust error handling. 
    } 

    request(options, handleResponse); 
} 

exports.posts = getPosts; 

더 나은 오류 만들기 같이, 거기에 처리가있을 수 있습니다 JSON.parse이 올바르게 작동하지만 그 아이디어가 있어야합니다.

+0

죄송합니다. 오타였습니다. 설치가 올바르게되었습니다. – user2270029