Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在express.js中将逻辑导出为函数_Javascript_Node.js_Express - Fatal编程技术网

Javascript 在express.js中将逻辑导出为函数

Javascript 在express.js中将逻辑导出为函数,javascript,node.js,express,Javascript,Node.js,Express,从express.js中的API控制器导出基本逻辑时出现问题。下面是之前的代码(工作),然后将逻辑导出到外部函数(不工作) GET'/'请求触发async.series向其他源发出请求,并将其作为一个JSON返回给客户端 这样应用时,此选项有效: *app.js router.get('/', function(req, res) { res.header({'Access-Control-Allow-Origin': '*'}); async.series([ function

从express.js中的API控制器导出基本逻辑时出现问题。下面是之前的代码(工作),然后将逻辑导出到外部函数(不工作)

GET'/'
请求触发
async.series
向其他源发出请求,并将其作为一个JSON返回给客户端

这样应用时,此选项有效:

*app.js

router.get('/', function(req, res) {
  res.header({'Access-Control-Allow-Origin': '*'});
  async.series([
    function(callback){
      request('https://openapi.etsy.com/v2/listings/active?includes=Images&keywords=' + req.param('SearchIndex') + '&limit=100&api_key=' + process.env.ETSY_KEY, function(error, response, etsyBody) {
        callback(null, etsyBody)
      });
    },
    function(callback){
      request('http://svcs.ebay.com/services/search/FindingService/v1?OPERATION-NAME=findItemsByKeywords&SERVICE-VERSION=1.0.0&SECURITY-APPNAME=squidsea-b201-4872-8e57-6fc17238c44e&RESPONSE-DATA-FORMAT=JSON&REST-PAYLOAD&keywords=' + req.param('SearchIndex'), function(error, response, ebayBody) {
      callback(null, ebayBody)
      });
    }],
    function(err, results){
      if (!err) { return res.json(
        {
          'etsy': JSON.parse(results[0]),
          'ebay': JSON.parse(results[1])
        }
        )};
        return err
    })
});
var unpack = function() {
  return {
    'etsy': JSON.parse(results[0]),
    'ebay': JSON.parse(results[1])
  };
};

router.get('/', function(req, res) {
  res.header({'Access-Control-Allow-Origin': '*'});
  async.series([
    function(callback){
      request('https://openapi.etsy.com/v2/listings/active?includes=Images&keywords=' + req.param('SearchIndex') + '&limit=100&api_key=' + process.env.ETSY_KEY, function(error, response, etsyBody) {
        callback(null, etsyBody)
      });
    },
    function(callback){
      request('http://svcs.ebay.com/services/search/FindingService/v1?OPERATION-NAME=findItemsByKeywords&SERVICE-VERSION=1.0.0&SECURITY-APPNAME=squidsea-b201-4872-8e57-6fc17238c44e&RESPONSE-DATA-FORMAT=JSON&REST-PAYLOAD&keywords=' + req.param('SearchIndex'), function(error, response, ebayBody) {
      callback(null, ebayBody)
      });
    }],
    function(err, results){
      if (!err) { return res.json( unpack )};
        return err
    })
});
尝试导出将结果数组放入JSON对象的函数,
unpack

*app.js

router.get('/', function(req, res) {
  res.header({'Access-Control-Allow-Origin': '*'});
  async.series([
    function(callback){
      request('https://openapi.etsy.com/v2/listings/active?includes=Images&keywords=' + req.param('SearchIndex') + '&limit=100&api_key=' + process.env.ETSY_KEY, function(error, response, etsyBody) {
        callback(null, etsyBody)
      });
    },
    function(callback){
      request('http://svcs.ebay.com/services/search/FindingService/v1?OPERATION-NAME=findItemsByKeywords&SERVICE-VERSION=1.0.0&SECURITY-APPNAME=squidsea-b201-4872-8e57-6fc17238c44e&RESPONSE-DATA-FORMAT=JSON&REST-PAYLOAD&keywords=' + req.param('SearchIndex'), function(error, response, ebayBody) {
      callback(null, ebayBody)
      });
    }],
    function(err, results){
      if (!err) { return res.json(
        {
          'etsy': JSON.parse(results[0]),
          'ebay': JSON.parse(results[1])
        }
        )};
        return err
    })
});
var unpack = function() {
  return {
    'etsy': JSON.parse(results[0]),
    'ebay': JSON.parse(results[1])
  };
};

router.get('/', function(req, res) {
  res.header({'Access-Control-Allow-Origin': '*'});
  async.series([
    function(callback){
      request('https://openapi.etsy.com/v2/listings/active?includes=Images&keywords=' + req.param('SearchIndex') + '&limit=100&api_key=' + process.env.ETSY_KEY, function(error, response, etsyBody) {
        callback(null, etsyBody)
      });
    },
    function(callback){
      request('http://svcs.ebay.com/services/search/FindingService/v1?OPERATION-NAME=findItemsByKeywords&SERVICE-VERSION=1.0.0&SECURITY-APPNAME=squidsea-b201-4872-8e57-6fc17238c44e&RESPONSE-DATA-FORMAT=JSON&REST-PAYLOAD&keywords=' + req.param('SearchIndex'), function(error, response, ebayBody) {
      callback(null, ebayBody)
      });
    }],
    function(err, results){
      if (!err) { return res.json( unpack )};
        return err
    })
});

我已经尝试了各种不同的组合,我担心它可能是简单的,但是经过2/3天的努力,我还没有找到一个有效的解决方案。对于console.log,第一个结果返回所需的对象,第二个结果返回空白。

是否将结果传递给函数

function unpack(results) {
  return {
    'etsy': JSON.parse(results[0]),
    'ebay': JSON.parse(results[1])
  };
}; 

// ...

function(err, results){
  if (!err) { return res.json( unpack(results) )};
    return err
})

在重构代码中,调用
res.json()
,并将函数名作为参数传递
res.json()
对传递给它的值调用
json.stringify()
,这意味着调用的是
json.stringify(unpack)
,它将计算为
未定义的

您可能需要调用类似
res.json(解包(结果))