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

时间: 2024-11-12 00:38:35

nodejs使用request和bluebird编写的http请求模块的相关文章

koa-bodyParse 接受post 大表单报错:nodejs Error request entity too large

Node.js从2009横空出世之后,至今已经7年有余,各种web框架也林林总总,目前大约在npm上有35万左右包,刨去前端和一些无意义的封装,也是有非常可观的优秀的模块的.其中web框架也是特别抢眼的,从早期的express到现在koa,对异步流程控制的改进前仆后继.随着移动端崛起面向api的框架hapi和restify也如火如荼,更有一些面向特性的框架,比如thinkjs对es6/es7/typescript支持,整体来说,质量都是非常不错的,算百花齐放,还是那句话,即使不优化,你也能用这些

Nodejs中request出现ESOCKETTIMEDOUT解决方案

做需求的时候,使用Nodejs的request批量请求某一个接口,由于接口超时,出现 ESOCKETTIMEDOUT,程序中断 为了让程序遇到 ESOCKETTIMEDOUT 之后能够继续执行下去,需要对 request 部分加上 try...catch,再catch中记录这条失败请求的信息,后面不断重试 try{ //这里是你request请求的代码 }catch(e){ //这里需要用一些措施记录下失败的数据 //1.将错误请求输出到某一个日志文件中 //2.将错误请求保存到某个数组中,下面

利用Nodejs & Cheerio & Request抓取Lofter美女图片

还是参考了这篇文章: http://cnodejs.org/topic/54bdaac4514ea9146862abee 另外有上面文章 nodejs抓取网易公开课的一些经验. 代码如下,注意其中用到了 http获取网页结果,request进行http请求,cheerio进行解析,mkdirp创建目录,fs创建文件,iconv-lite进行格式转换(此例非必须). curl.js: /** * Created by baidu on 16/10/17. */ var http = require

NodeJS: 处理request网页乱码问题

对于gb2312编码的网页,直接用request去获取会得到乱码的结果,解决方法很简单: 1. npm install iconv-lite 2. var iconv = require('iconv-lite'); 3. request.get({ url : url , encoding : null //让body 直接是buffer }, response); 4. var response = function (err, response, body) { //返回的body 直接就

NodeJS POST Request Over JSON-RPC

1.npm install art-template2.npm  install request3.在app.js中加入以下代码转html: var template = require('art-template');template.config('base', '');template.config('extname', '.html');app.engine('.html', template.__express);app.set('view engine', 'html'); 4.在r

nodejs Error: request entity too large解决方案

错误如图: 解决方案: app.js添加 var bodyParser = require('body-parser'); app.use(bodyParser.json({limit: '50mb'})); app.use(bodyParser.urlencoded({limit: '50mb', extended: true}));

request重定向或者是response转发请求后面的代码依然执行

调用response.redirect(),或者request.getRequestDispatcher(loginAddr).forward(request,response);后,后面的代码照样执行,虽然能转发到相应的页面,代码大概如下: response.redirect("/login.jsp"): System.out.printLn("hello world!!"); 上面的代码执行之后,控制台依然打印出hello world!! 同样的,下面的代码:

nodejs 5.2.0文档自翻译——HTTP模块

HTTP Class: http.Agent new Agent([options]) agent.destroy() agent.freeSockets agent.getName(options) agent.maxFreeSockets agent.maxSockets agent.requests agent.sockets Class: http.ClientRequest Event: 'abort' Event: 'connect' Event: 'continue' Event:

request使用getReader()和getInputStream()获取请求参数报400错误

参考:http://liwx2000.iteye.com/blog/1542431 和http://stackoverflow.com/questions/7318632/java-lang-illegalstateexception-getreader-has-already-been-called-for-this-re 原因:ServletRequest中getReader()和getInputStream()只能调用一次的解决办法 最近使用spring mvc做项目,数据格式是json,