Nodejs + Q promise +方法返回基于url类型

时间:2016-06-02 07:47:53

标签: javascript node.js api url q

我正在使用节点js作为后端,也使用q promise包。

问题:我正在尝试获取第三方产品详细信息。 1. www.abcd.com 2. www.xyz.com - 我在后端处理这个方法。

可能的网址:

  1. 本地主机:8080 /搜索类型= “ABCD”;
  2. 本地主机:8080 /搜索类型= “XYZ”;
  3. 本地主机:8080 /搜索;

    如果上述网址类型为 abcd ,则表示需要搜索一些不同的thridparty(www.abcd.com)http url;

    如果以上网址类型为 xyz ,则表示需要搜索其他一些不同的thridparty(www.xyz.com)http url

    如果上面的URL没有获取类型意味着需要搜索www.abcd.com如果找到的结果意味着返回响应,如果找不到结果意味着需要调用www.xyz.com url然后返回响应。 (注意 - 这里有两个第三方api需要致电)

  4. 代码:

    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)添加一些不同的函数,然后可以根据类型调用该方法。

    请以好的方式建议。

0 个答案:

没有答案