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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nodejs使用request和bluebird编写的http请求模块相关的知识,希望对你有一定的参考价值。

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

以上是关于nodejs使用request和bluebird编写的http请求模块的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Bluebird 承诺 NodeJS Express

无法得到我在 nodejs / mongoose / bluebird 中返回的承诺

NodeJS Bluebird Promise 在处理程序中创建但没有从它返回

与 fs 和 bluebird 的承诺

Mongoose与bluebird结合使用实例

Nodejs Promise的一点记录