2014-10-09 4 views
1

현재 노드 모듈을 만들고 있는데 모듈의 함수에서 데이터를 반환하는 데 문제가 있습니다. 나는 약간의 검색과 독해를했으나 그것을 이해할 수 없었다.노드 모듈의 함수에서 데이터를 반환합니다.

API에서 일부 JSON 데이터를 가져 오기 위해 요청 플러그인을 사용하고 있으며 해당 데이터를 내 응용 프로그램에 반환하여 사용하고 싶습니다. 여기

var express = require('express'); 
var router = express.Router(); 
var request = require('request'); 


exports.zipQuery = function(zip){ 

    request('http://api.smartystreets.com/zipcode?' + 'auth-id=XXXXX' + '&auth-token=XXXXX' + '&zipcode=' + zip, function(err, response, body){ 
    if(!err && response.statusCode == 200){ 
     return body; 
    } else { 
    return 'Error returning data'; 
    } 
    }); 
}; 

내가 그것을 전화 드렸습니다 모듈의 : 여기 내 모듈 코드의 나는 모든 JSON 데이터 벌금을 받고있어

var express = require('express'); 
var router = express.Router(); 
var zip = require('../ziplookup/index'); 

router.get('/', function(req,res){ 
    res.send(zip.zipQuery(46805)); 

}); 

module.exports = router; 

,하지만 난 반환하는 방법을 알아낼 수 없습니다 그것을 사용하십시오. 현재 콘솔을 볼 때 정의되지 않습니다.

도움 주셔서 감사합니다. 나는 약간의 노드/js 초심자이므로 고맙습니다!

+0

클라이언트 측에서 무엇을 가지고 있습니까? – xShirase

답변

0

zipQuery()은 문이 함수가 완료되기 전에 실행되지 않으므로 undefined을 반환합니다. request은 비동기식이므로 콜백이 필요합니다.

exports.zipQuery = function(zip, callback){ 
    request('http://api.smartystreets.com/zipcode?' + 'auth-id=XXXXX' + '&auth-token=XXXXX' + '&zipcode=' + zip, function(err, response, body){ 
    if(!err && response.statusCode == 200){ 
     callback(null, body); // invoke callback function with the value you want to pass back 
    } else { 
     callback(new Error('Error returning data')); 
    } 
    }); 
} 

// elsewhere 
var zipQuery = require('zipQuery').zipQuery; 

zipQuery(98765, function(error, response) { 
    if (error) { 
    console.log(error) 
    } else { 
    console.log(null, "We got a good response! " + response); 
    } 
}); 
+1

또,'return '반환 값이 거의 항상 비동기 함수에 의해 무시되기 때문에 데이터'; '를 반환하는 오류는 쓸모가 없습니다. 콜백은 오류가 발생할 경우 Error 객체를 전달할 수 있도록 "오류 우선"형식을 따라야합니다. 그렇지 않으면 null/undefined가 정의됩니다. – mscdex

+0

네, 맞습니다. 업데이트 된 답변! –

+0

고맙습니다 @AlexWayne! 그게 내가 필요한 것입니다. 이제는 모듈을 좀 더 잘 이해합니다. – anguiac7

관련 문제