superagent
Advanced tools
Comparing version 0.5.1 to 0.6.0
0.6.0 / 2012-07-17 | ||
================== | ||
* add `res.send('foo=bar')` default of "application/x-www-form-urlencoded" | ||
0.5.1 / 2012-07-16 | ||
@@ -3,0 +8,0 @@ ================== |
@@ -277,3 +277,3 @@ | ||
* .type('json') | ||
* .send('{"name":"tj"}) | ||
* .send('{"name":"tj"}') | ||
* .end(callback) | ||
@@ -298,2 +298,9 @@ * | ||
* | ||
* // string defaults to x-www-form-urlencoded | ||
* request.post('/user') | ||
* .send('name=tj') | ||
* .send('foo=bar') | ||
* .send('bar=baz') | ||
* .end(callback) | ||
* | ||
* @param {String|Object} data | ||
@@ -307,2 +314,4 @@ * @return {Request} for chaining | ||
var obj = isObject(data); | ||
var req = this.request(); | ||
var type = req.getHeader('Content-Type'); | ||
@@ -314,2 +323,16 @@ // merge | ||
} | ||
// string | ||
} else if ('string' == typeof data) { | ||
// default to x-www-form-urlencoded | ||
if (!type) this.type('form'); | ||
type = req.getHeader('Content-Type'); | ||
// concat & | ||
if ('application/x-www-form-urlencoded' == type) { | ||
this._data = this._data | ||
? this._data + '&' + data | ||
: data; | ||
} else { | ||
this._data = (this._data || '') + data; | ||
} | ||
} else { | ||
@@ -321,7 +344,4 @@ this._data = data; | ||
// pre-defined type | ||
if (this.request().getHeader('Content-Type')) return this; | ||
// default to json | ||
this.type('json'); | ||
if (!type) this.type('json'); | ||
return this; | ||
@@ -518,4 +538,6 @@ }; | ||
// serialize stuff | ||
var serialize = exports.serialize[req.getHeader('Content-Type')]; | ||
if (serialize) data = serialize(data); | ||
if ('string' != typeof data) { | ||
var serialize = exports.serialize[req.getHeader('Content-Type')]; | ||
if (serialize) data = serialize(data); | ||
} | ||
@@ -522,0 +544,0 @@ // content-length |
@@ -519,2 +519,8 @@ | ||
* | ||
* // defaults to x-www-form-urlencoded | ||
* request.post('/user') | ||
* .send('name=tobi') | ||
* .send('species=ferret') | ||
* .end(callback) | ||
* | ||
* @param {String|Object} data | ||
@@ -528,2 +534,3 @@ * @return {Request} for chaining | ||
var obj = isObject(data); | ||
var type = this.header['content-type']; | ||
@@ -535,2 +542,12 @@ // merge | ||
} | ||
} else if ('string' == typeof data) { | ||
if (!type) this.type('form'); | ||
type = this.header['content-type']; | ||
if ('application/x-www-form-urlencoded' == type) { | ||
this._data = this._data | ||
? this._data + '&' + data | ||
: data; | ||
} else { | ||
this._data = (this._data || '') + data; | ||
} | ||
} else { | ||
@@ -541,4 +558,3 @@ this._data = data; | ||
if (!obj) return this; | ||
if (this.header['content-type']) return this; | ||
this.type('json'); | ||
if (!type) this.type('json'); | ||
return this; | ||
@@ -582,3 +598,3 @@ }; | ||
// body | ||
if ('GET' != this.method && 'HEAD' != this.method) { | ||
if ('GET' != this.method && 'HEAD' != this.method && 'string' != typeof data) { | ||
// serialize stuff | ||
@@ -585,0 +601,0 @@ var serialize = request.serialize[this.header['content-type']]; |
{ | ||
"name": "superagent" | ||
, "version": "0.5.1" | ||
, "version": "0.6.0" | ||
, "description": "elegant & feature rich browser / node HTTP with a fluent API" | ||
@@ -5,0 +5,0 @@ , "keywords": ["http", "ajax", "request", "agent"] |
@@ -694,2 +694,8 @@ | ||
* | ||
* // defaults to x-www-form-urlencoded | ||
* request.post('/user') | ||
* .send('name=tobi') | ||
* .send('species=ferret') | ||
* .end(callback) | ||
* | ||
* @param {String|Object} data | ||
@@ -703,2 +709,3 @@ * @return {Request} for chaining | ||
var obj = isObject(data); | ||
var type = this.header['content-type']; | ||
@@ -710,2 +717,12 @@ // merge | ||
} | ||
} else if ('string' == typeof data) { | ||
if (!type) this.type('form'); | ||
type = this.header['content-type']; | ||
if ('application/x-www-form-urlencoded' == type) { | ||
this._data = this._data | ||
? this._data + '&' + data | ||
: data; | ||
} else { | ||
this._data = (this._data || '') + data; | ||
} | ||
} else { | ||
@@ -716,4 +733,3 @@ this._data = data; | ||
if (!obj) return this; | ||
if (this.header['content-type']) return this; | ||
this.type('json'); | ||
if (!type) this.type('json'); | ||
return this; | ||
@@ -757,3 +773,3 @@ }; | ||
// body | ||
if ('GET' != this.method && 'HEAD' != this.method) { | ||
if ('GET' != this.method && 'HEAD' != this.method && 'string' != typeof data) { | ||
// serialize stuff | ||
@@ -760,0 +776,0 @@ var serialize = request.serialize[this.header['content-type']]; |
@@ -5,2 +5,2 @@ /** | ||
* Check if `obj` is an array. | ||
*/function isArray(obj){return"[object Array]"=={}.toString.call(obj)}function EventEmitter(){}EventEmitter.prototype.on=function(name,fn){return this.$events||(this.$events={}),this.$events[name]?isArray(this.$events[name])?this.$events[name].push(fn):this.$events[name]=[this.$events[name],fn]:this.$events[name]=fn,this},EventEmitter.prototype.addListener=EventEmitter.prototype.on,EventEmitter.prototype.once=function(name,fn){var self=this;function on(){self.removeListener(name,on),fn.apply(this,arguments)}return on.listener=fn,this.on(name,on),this},EventEmitter.prototype.removeListener=function(name,fn){if(this.$events&&this.$events[name]){var list=this.$events[name];if(isArray(list)){var pos=-1;for(var i=0,l=list.length;i<l;i++)if(list[i]===fn||list[i].listener&&list[i].listener===fn){pos=i;break}if(pos<0)return this;list.splice(pos,1),list.length||delete this.$events[name]}else(list===fn||list.listener&&list.listener===fn)&&delete this.$events[name]}return this},EventEmitter.prototype.removeAllListeners=function(name){return name===undefined?(this.$events={},this):(this.$events&&this.$events[name]&&(this.$events[name]=null),this)},EventEmitter.prototype.listeners=function(name){return this.$events||(this.$events={}),this.$events[name]||(this.$events[name]=[]),isArray(this.$events[name])||(this.$events[name]=[this.$events[name]]),this.$events[name]},EventEmitter.prototype.emit=function(name){if(!this.$events)return!1;var handler=this.$events[name];if(!handler)return!1;var args=[].slice.call(arguments,1);if("function"==typeof handler)handler.apply(this,args);else{if(!isArray(handler))return!1;var listeners=handler.slice();for(var i=0,l=listeners.length;i<l;i++)listeners[i].apply(this,args)}return!0},function(){var Emitter="undefined"==typeof exports?EventEmitter:require("emitter");function noop(){}function getXHR(){if(window.XMLHttpRequest&&("file:"!=window.location.protocol||!window.ActiveXObject))return new XMLHttpRequest;try{return new ActiveXObject("Microsoft.XMLHTTP")}catch(e){}try{return new ActiveXObject("Msxml2.XMLHTTP.6.0")}catch(e){}try{return new ActiveXObject("Msxml2.XMLHTTP.3.0")}catch(e){}try{return new ActiveXObject("Msxml2.XMLHTTP")}catch(e){}return!1}var trim="".trim?function(s){return s.trim()}:function(s){return s.replace(/(^\s*|\s*$)/g,"")};function isFunction(obj){return"function"==typeof obj}function isObject(obj){return null!=obj&&"object"==typeof obj}function serialize(obj){if(!isObject(obj))return obj;var pairs=[];for(var key in obj)pairs.push(encodeURIComponent(key)+"="+encodeURIComponent(obj[key]));return pairs.join("&")}request.serializeObject=serialize;function parseString(str){var obj={},pairs=str.split("&"),parts,pair;for(var i=0,len=pairs.length;i<len;++i)pair=pairs[i],parts=pair.split("="),obj[decodeURIComponent(parts[0])]=decodeURIComponent(parts[1]);return obj}request.parseString=parseString,request.types={html:"text/html",json:"application/json",urlencoded:"application/x-www-form-urlencoded",form:"application/x-www-form-urlencoded","form-data":"application/x-www-form-urlencoded"},request.serialize={"application/x-www-form-urlencoded":serialize,"application/json":JSON.stringify},request.parse={"application/x-www-form-urlencoded":parseString,"application/json":JSON.parse};function parseHeader(str){var lines=str.split(/\r?\n/),fields={},index,line,field,val;lines.pop();for(var i=0,len=lines.length;i<len;++i)line=lines[i],index=line.indexOf(":"),field=line.slice(0,index).toLowerCase(),val=trim(line.slice(index+1)),fields[field]=val;return fields}function type(str){return str.split(/ *; */).shift()}function params(str){return str.split(/ *; */).reduce(function(obj,str){var parts=str.split(/ *= */),key=parts.shift(),val=parts.shift();return key&&val&&(obj[key]=val),obj},{})}function Response(xhr,options){options=options||{},this.xhr=xhr,this.text=xhr.responseText,this.setStatusProperties(xhr.status),this.header=parseHeader(xhr.getAllResponseHeaders()),this.setHeaderProperties(this.header),this.body=this.parseBody(this.text)}Response.prototype.setHeaderProperties=function(header){var ct=this.header["content-type"]||"";this.type=type(ct);var obj=params(ct);for(var key in obj)this[key]=obj[key]},Response.prototype.parseBody=function(str){var parse=request.parse[this.type];return parse?parse(str):null},Response.prototype.setStatusProperties=function(status){var type=status/100|0;this.status=status,this.statusType=type,this.info=1==type,this.ok=2==type,this.clientError=4==type,this.serverError=5==type,this.error=4==type||5==type,this.accepted=202==status,this.noContent=204==status||1223==status,this.badRequest=400==status,this.unauthorized=401==status,this.notAcceptable=406==status,this.notFound=404==status},request.Response=Response;function Request(method,url){var self=this;Emitter.call(this),this.method=method,this.url=url,this.header={},this.set("X-Requested-With","XMLHttpRequest"),this.on("end",function(){self.callback(new Response(self.xhr))})}Request.prototype=new Emitter,Request.prototype.constructor=Request,Request.prototype.set=function(field,val){if(isObject(field)){for(var key in field)this.set(key,field[key]);return this}return this.header[field.toLowerCase()]=val,this},Request.prototype.type=function(type){return this.set("Content-Type",request.types[type]||type),this},Request.prototype.query=function(obj){this._query=this._query||{};for(var key in obj)this._query[key]=obj[key];return this},Request.prototype.send=function(data){if("GET"==this.method)return this.query(data);var obj=isObject(data);if(obj&&isObject(this._data))for(var key in data)this._data[key]=data[key];else this._data=data;return obj?this.header["content-type"]?this:(this.type("json"),this):this},Request.prototype.end=function(fn){var self=this,xhr=this.xhr=getXHR(),query=this._query,data=this._data;this.callback=fn||noop,xhr.onreadystatechange=function(){4==xhr.readyState&&self.emit("end")},query&&(query=request.serializeObject(query),this.url+=~this.url.indexOf("?")?"&"+query:"?"+query),xhr.open(this.method,this.url,!0);if("GET"!=this.method&&"HEAD"!=this.method){var serialize=request.serialize[this.header["content-type"]];serialize&&(data=serialize(data))}for(var field in this.header)xhr.setRequestHeader(field,this.header[field]);return xhr.send(data),this},request.Request=Request;function request(method,url){return"function"==typeof url?(new Request("GET",method)).end(url):1==arguments.length?new Request("GET",method):new Request(method,url)}request.get=function(url,data,fn){var req=request("GET",url);return isFunction(data)&&(fn=data,data=null),data&&req.send(data),fn&&req.end(fn),req},request.head=function(url,data,fn){var req=request("HEAD",url);return isFunction(data)&&(fn=data,data=null),data&&req.send(data),fn&&req.end(fn),req},request.del=function(url,fn){var req=request("DELETE",url);return fn&&req.end(fn),req},request.patch=function(url,data,fn){var req=request("PATCH",url);return data&&req.send(data),fn&&req.end(fn),req},request.post=function(url,data,fn){var req=request("POST",url);return data&&req.send(data),fn&&req.end(fn),req},request.put=function(url,data,fn){var req=request("PUT",url);return data&&req.send(data),fn&&req.end(fn),req},"undefined"==typeof exports?window.request=window.superagent=request:module.exports=request}(); | ||
*/function isArray(obj){return"[object Array]"=={}.toString.call(obj)}function EventEmitter(){}EventEmitter.prototype.on=function(name,fn){return this.$events||(this.$events={}),this.$events[name]?isArray(this.$events[name])?this.$events[name].push(fn):this.$events[name]=[this.$events[name],fn]:this.$events[name]=fn,this},EventEmitter.prototype.addListener=EventEmitter.prototype.on,EventEmitter.prototype.once=function(name,fn){var self=this;function on(){self.removeListener(name,on),fn.apply(this,arguments)}return on.listener=fn,this.on(name,on),this},EventEmitter.prototype.removeListener=function(name,fn){if(this.$events&&this.$events[name]){var list=this.$events[name];if(isArray(list)){var pos=-1;for(var i=0,l=list.length;i<l;i++)if(list[i]===fn||list[i].listener&&list[i].listener===fn){pos=i;break}if(pos<0)return this;list.splice(pos,1),list.length||delete this.$events[name]}else(list===fn||list.listener&&list.listener===fn)&&delete this.$events[name]}return this},EventEmitter.prototype.removeAllListeners=function(name){return name===undefined?(this.$events={},this):(this.$events&&this.$events[name]&&(this.$events[name]=null),this)},EventEmitter.prototype.listeners=function(name){return this.$events||(this.$events={}),this.$events[name]||(this.$events[name]=[]),isArray(this.$events[name])||(this.$events[name]=[this.$events[name]]),this.$events[name]},EventEmitter.prototype.emit=function(name){if(!this.$events)return!1;var handler=this.$events[name];if(!handler)return!1;var args=[].slice.call(arguments,1);if("function"==typeof handler)handler.apply(this,args);else{if(!isArray(handler))return!1;var listeners=handler.slice();for(var i=0,l=listeners.length;i<l;i++)listeners[i].apply(this,args)}return!0},function(){var Emitter="undefined"==typeof exports?EventEmitter:require("emitter");function noop(){}function getXHR(){if(window.XMLHttpRequest&&("file:"!=window.location.protocol||!window.ActiveXObject))return new XMLHttpRequest;try{return new ActiveXObject("Microsoft.XMLHTTP")}catch(e){}try{return new ActiveXObject("Msxml2.XMLHTTP.6.0")}catch(e){}try{return new ActiveXObject("Msxml2.XMLHTTP.3.0")}catch(e){}try{return new ActiveXObject("Msxml2.XMLHTTP")}catch(e){}return!1}var trim="".trim?function(s){return s.trim()}:function(s){return s.replace(/(^\s*|\s*$)/g,"")};function isFunction(obj){return"function"==typeof obj}function isObject(obj){return null!=obj&&"object"==typeof obj}function serialize(obj){if(!isObject(obj))return obj;var pairs=[];for(var key in obj)pairs.push(encodeURIComponent(key)+"="+encodeURIComponent(obj[key]));return pairs.join("&")}request.serializeObject=serialize;function parseString(str){var obj={},pairs=str.split("&"),parts,pair;for(var i=0,len=pairs.length;i<len;++i)pair=pairs[i],parts=pair.split("="),obj[decodeURIComponent(parts[0])]=decodeURIComponent(parts[1]);return obj}request.parseString=parseString,request.types={html:"text/html",json:"application/json",urlencoded:"application/x-www-form-urlencoded",form:"application/x-www-form-urlencoded","form-data":"application/x-www-form-urlencoded"},request.serialize={"application/x-www-form-urlencoded":serialize,"application/json":JSON.stringify},request.parse={"application/x-www-form-urlencoded":parseString,"application/json":JSON.parse};function parseHeader(str){var lines=str.split(/\r?\n/),fields={},index,line,field,val;lines.pop();for(var i=0,len=lines.length;i<len;++i)line=lines[i],index=line.indexOf(":"),field=line.slice(0,index).toLowerCase(),val=trim(line.slice(index+1)),fields[field]=val;return fields}function type(str){return str.split(/ *; */).shift()}function params(str){return str.split(/ *; */).reduce(function(obj,str){var parts=str.split(/ *= */),key=parts.shift(),val=parts.shift();return key&&val&&(obj[key]=val),obj},{})}function Response(xhr,options){options=options||{},this.xhr=xhr,this.text=xhr.responseText,this.setStatusProperties(xhr.status),this.header=parseHeader(xhr.getAllResponseHeaders()),this.setHeaderProperties(this.header),this.body=this.parseBody(this.text)}Response.prototype.setHeaderProperties=function(header){var ct=this.header["content-type"]||"";this.type=type(ct);var obj=params(ct);for(var key in obj)this[key]=obj[key]},Response.prototype.parseBody=function(str){var parse=request.parse[this.type];return parse?parse(str):null},Response.prototype.setStatusProperties=function(status){var type=status/100|0;this.status=status,this.statusType=type,this.info=1==type,this.ok=2==type,this.clientError=4==type,this.serverError=5==type,this.error=4==type||5==type,this.accepted=202==status,this.noContent=204==status||1223==status,this.badRequest=400==status,this.unauthorized=401==status,this.notAcceptable=406==status,this.notFound=404==status},request.Response=Response;function Request(method,url){var self=this;Emitter.call(this),this.method=method,this.url=url,this.header={},this.set("X-Requested-With","XMLHttpRequest"),this.on("end",function(){self.callback(new Response(self.xhr))})}Request.prototype=new Emitter,Request.prototype.constructor=Request,Request.prototype.set=function(field,val){if(isObject(field)){for(var key in field)this.set(key,field[key]);return this}return this.header[field.toLowerCase()]=val,this},Request.prototype.type=function(type){return this.set("Content-Type",request.types[type]||type),this},Request.prototype.query=function(obj){this._query=this._query||{};for(var key in obj)this._query[key]=obj[key];return this},Request.prototype.send=function(data){if("GET"==this.method)return this.query(data);var obj=isObject(data),type=this.header["content-type"];if(obj&&isObject(this._data))for(var key in data)this._data[key]=data[key];else"string"==typeof data?(type||this.type("form"),type=this.header["content-type"],"application/x-www-form-urlencoded"==type?this._data=this._data?this._data+"&"+data:data:this._data=(this._data||"")+data):this._data=data;return obj?(type||this.type("json"),this):this},Request.prototype.end=function(fn){var self=this,xhr=this.xhr=getXHR(),query=this._query,data=this._data;this.callback=fn||noop,xhr.onreadystatechange=function(){4==xhr.readyState&&self.emit("end")},query&&(query=request.serializeObject(query),this.url+=~this.url.indexOf("?")?"&"+query:"?"+query),xhr.open(this.method,this.url,!0);if("GET"!=this.method&&"HEAD"!=this.method&&"string"!=typeof data){var serialize=request.serialize[this.header["content-type"]];serialize&&(data=serialize(data))}for(var field in this.header)xhr.setRequestHeader(field,this.header[field]);return xhr.send(data),this},request.Request=Request;function request(method,url){return"function"==typeof url?(new Request("GET",method)).end(url):1==arguments.length?new Request("GET",method):new Request(method,url)}request.get=function(url,data,fn){var req=request("GET",url);return isFunction(data)&&(fn=data,data=null),data&&req.send(data),fn&&req.end(fn),req},request.head=function(url,data,fn){var req=request("HEAD",url);return isFunction(data)&&(fn=data,data=null),data&&req.send(data),fn&&req.end(fn),req},request.del=function(url,fn){var req=request("DELETE",url);return fn&&req.end(fn),req},request.patch=function(url,data,fn){var req=request("PATCH",url);return data&&req.send(data),fn&&req.end(fn),req},request.post=function(url,data,fn){var req=request("POST",url);return data&&req.send(data),fn&&req.end(fn),req},request.put=function(url,data,fn){var req=request("PUT",url);return data&&req.send(data),fn&&req.end(fn),req},"undefined"==typeof exports?window.request=window.superagent=request:module.exports=request}(); |
@@ -5,5 +5,6 @@ | ||
request | ||
.get('http://google.com') | ||
.post('http://127.0.0.1:3000/') | ||
.send('foo=bar') | ||
.end(function(res){ | ||
console.log(res.text); | ||
}) |
86011
2573