我正在使用节点js作为后端,也使用q promise包。
问题:我正在尝试获取第三方产品详细信息。 1. www.abcd.com 2. www.xyz.com - 我在后端处理这个方法。
可能的网址:
本地主机:8080 /搜索;
如果上述网址类型为 abcd ,则表示需要搜索一些不同的thridparty(www.abcd.com)http url;
如果以上网址类型为 xyz ,则表示需要搜索其他一些不同的thridparty(www.xyz.com)http url
如果上面的URL没有获取类型意味着需要搜索www.abcd.com如果找到的结果意味着返回响应,如果找不到结果意味着需要调用www.xyz.com url然后返回响应。 (注意 - 这里有两个第三方api需要致电)
代码:
router.get('/search', function(req, res, next) {
if (!( typeof req.query === 'undefined' || req.query === null || req.query == "")) {
var type = req.query;
}
var spec = {
resp : {}
};
Q(spec).then(function(spec) {
var deferred = Q.defer();
var optionsget = {
host : 'abcd.com',
method : 'GET'
};
var reqGet = https.request(optionsget, function(res) {
var getProductInfo = '';
res.on('data', function(d) {
getProductInfo += d;
});
res.on('end', function() {
if (( typeof message == 'undefined') && (!( typeof items === 'undefined' || items === null))) {
spec.resp.list = items;
deferred.resolve(spec);
} else {
spec.resp.message = message;
deferred.reject(spec);
}
});
});
reqGet.end();
reqGet.on('error', function(e) {
console.log(e);
deferred.reject(spec);
});
return deferred.promise;
}).then(function(spec) {
var deferred = Q.defer();
var optionsget = {
host : 'xyz.com',
method : 'GET'
};
var reqGet = https.request(optionsget, function(res) {
var getProductInfo = '';
res.on('data', function(d) {
getProductInfo += d;
});
res.on('end', function() {
if (( typeof message == 'undefined') && (!( typeof items === 'undefined' || items === null))) {
spec.resp.list = items;
deferred.resolve(spec);
} else {
spec.resp.message = message;
deferred.reject(spec);
}
});
});
reqGet.end();
reqGet.on('error', function(e) {
console.log(e);
deferred.reject(spec);
});
return deferred.promise;
}).then(function(spec) {
spec.resp.status = 'Success';
res.send(spec.resp);
}).fail(function(spec) {
spec.resp.status = 'Error';
res.send(spec.resp);
});
});
我这是一个寒冷的问题。我理解需要检查类型和实现。我认为我们需要为(abcd和xyz)添加一些不同的函数,然后可以根据类型调用该方法。
请以好的方式建议。