我正在尝试创建一个Node模块,但是我很难从模块中的函数返回数据。我做了一些搜索和阅读,但一直无法弄清楚。
我正在使用请求插件从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';
}
});
};
这是我称之为的模块:
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;
我收到的所有JSON数据都很好,但我无法弄清楚如何将其返回使用它。目前,当我查看我的控制台时,我只是未定义。
感谢您的帮助!我是一个节点/ js新手,所以我很感激!
答案 0 :(得分:0)
zipQuery()
返回undefined
,因为在函数完成之前没有运行return
语句。这是因为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);
}
});