代码改变世界

nodejs使用request和bluebird编写的http请求模块

2017-05-02 12:13  游乐场123  阅读(1230)  评论(0编辑  收藏  举报
var request = require("request");
var promise = require("bluebird");
//使用bluebird将request库的所有异步方法编译成promise形式,会自动加上Async后缀
request = promise.promisifyAll(request);

var curl = (function () { 
    function curl() { } 
/** 
* 输入一个url和需要post的数据(如果需要post),然后返回最终访问到的结果. * 
* @author jie * @date 2015/2/5  
* @param string url 需要访问的url. 
* @param string postData 访问时,需要post过去的数据. 
* @return promise 
* */ 
curl.visitAsync = function (url, postData) { 
    if (postData === void 0) { postData = ""; } 
    try { //request.debug = true;//详细打印请求报告 
        var res; 
        url = url.trim();
         //为没有http开头的url添加http头,必须添加 
        if (!url.match(/^http./)) {
            { url = "http://" + url; } 
        }
        //默认超时时间timeout为20秒,无须设置 
        var options = { url: url, form: "" }; 
        if (postData) { 
            //使用request库中的form来保存post数据,这样访问的content-type会变成application/x-www-form-urlencoded
            options.form = postData; //post数据 
            res = request.postAsync(options);
         //返回代执行的promise函数 
        } else{
             res = request.getAsync(options);
        }
        //返回代执行的promise函数 
        return res.spread(function (res, body) { return body; }); 
    } catch (ex) {
     throw ex; 
    }
}; //visitAsync return curl;})();module.exports = curl;


使用:test.js


import curl = require(".curl");
var tsk = curl.visitAsync("http://www.baidu.com");
tsk.then(body => { console.log(body);})

看到bluebird库的api有catch()可以捕抓抛出的错误,不知道直接使用try-catch有没有作用呢~~~~~~~~
 https://www.npmjs.com/package/bluebird