【问题标题】:Return data from function in Node module从 Node 模块中的函数返回数据
【发布时间】:2014-10-09 21:57:51
【问题描述】:

我目前正在尝试创建一个 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 数据,但我不知道如何返回它以使用它。目前,当我查看控制台时,我只是不确定。

感谢您的帮助!我是一个 node/js 新手,所以我很感激!

【问题讨论】:

  • 你在客户端有什么?

标签: javascript node.js express


【解决方案1】:

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

【讨论】:

  • 另外,return 'Error returning data'; 是无用的,因为返回的值几乎总是被异步函数忽略。回调应遵循“错误优先”的格式,以便您可以在发生错误时传递一个错误对象(否则为 null/未定义)。
  • 非常感谢@AlexWayne!这正是我所需要的。现在我对模块有了更好的理解。
  • @AlexWayne - 你能解释一下 callback(null,body) 部分吗?为什么是空值?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-22
  • 1970-01-01
  • 1970-01-01
  • 2013-12-03
  • 2014-01-09
相关资源
最近更新 更多