从Node模块中的函数返回数据

时间:2014-10-09 21:57:52

标签: javascript node.js express

我正在尝试创建一个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新手,所以我很感激!

1 个答案:

答案 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);
  }
});