一、項目中常常性的使用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進行編寫,若有不足之處,敬請原諒。