使用nodegrass簡單封裝http請求例子

一、項目中常常性的使用http發送請求處理數據。而大部分請求方式爲get和post,因而對http請求進行封裝,提供代碼的利用率。node

二、nodegress是nodejs的一個請求工具。ajax

具體步驟及代碼以下:npm

一、安裝nodegrass,執行npm install nodegrass命令。json

二、封裝過程當中存在使用數據集合工具underscore工具,先進行安裝。app

三、nodegrass中post及get代碼以下:dom

NodeGrass.prototype.get = function(url,callback, reqheaders, charset){
    var protocol = getProtocol(url);
    var _defaultCharSet = 'utf8';
    
    if(typeof charset === 'string' ){
        _defaultCharSet = charset;
    }
    if(typeof(reqheaders) === "string" && charset === undefined) {
        _defaultCharSet = reqheaders;
    }
    var newheader = {};
    if(reqheaders !== undefined && typeof(reqheaders) === "object") {
        for(var ele in reqheaders) {
            newheader[ele.toLowerCase()] = reqheaders[ele];
        }
    }
    newheader["content-length"] = 0;
    var options = {
        host:getHost(url),
        port:getPort(url),
        path:getPath(url),
        method:'GET',
        headers:newheader
    };
     
    if(protocol === http || protocol === https){
       return _sendReq(protocol,null,options,_defaultCharSet,callback);
    }else{
        throw "sorry,this protocol do not support now";
    }

}

//Post Method Request
//Support HTTP and HTTPS request,and Automatic recognition
//@Param url
//@Param callback
//@Param header
//@param postdata
NodeGrass.prototype.post = function(url,callback,reqheaders,data,charset){
    var protocol = getProtocol(url);
    var _defaultCharSet = 'utf8';
    
    if(typeof charset === 'string' ){
        _defaultCharSet = charset;
    }

    if(typeof(data) === 'object'){data = querystring.stringify(data);}
    var options={
            host:getHost(url),
            port:getPort(url),
            path:getPath(url),
            method:'POST',
            headers:reqheaders
      };
    if(protocol === http || protocol === https){
        return _sendReq(protocol,data,options,_defaultCharSet,callback)
    }else{
        throw "sorry,this protocol do not support now";
    }
}

四、http的具體封裝,代碼以下:函數

var ng = require('nodegrass');
var $ = require('underscore');

var domain = 'http://www.*******.com';

exports.header = {
    'Content-Type': 'application/x-www-form-urlencoded'
};

exports.get = function (url, data, success) {
    ajax(url, 'get', data, success);
};

exports.post = function (url, data, success) {
    ajax(url, 'post', data, success);
};

function ajax(url, httpMethod, data, success) {
    var args = [function (res, status, headers) {
        try {
            var json = JSON.parse(res);
            success(json, headers);
        }
        catch(ex) {
            if(res.success)
                console.log('ajax fail: %s', url);
        }
    }, exports.header];

    if (httpMethod == 'get') {
        args.unshift([
            domain,
            url,
            '?', 
            $.map(data, function (v, k) {
                return [k, v].join('=');
            }).join('&')
        ].join(''));
    }
    else {
        data._ = '';
        args.unshift(domain + url);
        args.push(data);
    }
    args.push('utf8');
    ng[httpMethod].apply(ng, args).on('error', function () {
        console.log('ajax error: %s', url);
    });
}

根據node-grass中的具體post及get請求的代碼,對ajax進行模仿封裝。工具

一、通常爲一個固定的URL前綴請求,直接domain定義。post

二、每一個請求都有固定的header標籤。ui

三、http包含get、post請求兩種方式。

四、http包含

url:請求地址,

httpMothed:請求方式(post,get)

data:請求數據

success:成功與否執行的回調函數

五、其中對data的拼接方式使用"?","&"字符進行拼接處理。

六、此外還須標明字符集爲「utf8」的字符集

七、同時還有錯誤時所須要輸出的錯誤信息提示。

具體調用方式示例,代碼以下:

var ajax = require('./ajax');
  ajax.post('/user/save', s, function (resp) {
                if (!resp.success) {
                    console.log("error");
                }
                console.log("success");
            });    

如此能夠輕鬆快速的模擬請求處理相應數據。

 

以上例子根據nodegrassAPI進行編寫,若有不足之處,敬請原諒。

相關文章
相關標籤/搜索