Javascript 在express.js中将逻辑导出为函数
从express.js中的API控制器导出基本逻辑时出现问题。下面是之前的代码(工作),然后将逻辑导出到外部函数(不工作)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
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(解包(结果))代码>