forked from honeinc/ajaja
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
111 lines (91 loc) · 3.01 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
'use strict';
var extend = require( 'extend' );
var http = require( 'http' );
var url = require( 'url' );
module.exports = function( _options, callback ) {
var options = extend( true, {
url: '//' + ( _options.host ? _options.host : ( _options.hostname + ( _options.port ? ':' + _options.port : '' ) ) ) + _options.path,
responseType: 'json',
headers: {},
withCredentials: true
}, _options );
var data = options.data;
delete options.data;
var parsedURI = url.parse( options.url, false, true );
delete options.url;
options.hostname = options.hostname || parsedURI.hostname;
options.port = options.port || parsedURI.port;
options.path = options.path || parsedURI.path;
var dataString;
if ( typeof( data ) !== 'undefined' ) {
if ( options.method.toLowerCase() === 'get' ) {
var pairs = [];
for ( var key in data ) {
pairs.push( encodeURIComponent( key ) + '=' + encodeURIComponent( data[ key ] ) );
}
options.path += ( ( options.path.indexOf( '?' ) !== -1 ) ? '&' : '?' ) + pairs.join( '&' );
}
else {
try {
dataString = JSON.stringify( data );
options.headers[ 'Content-Type' ] = 'application/json';
options.headers[ 'Content-Length' ] = dataString.length;
}
catch( ex ) {
if ( callback ) {
callback( ex );
}
return;
}
}
}
var buffer;
var request = http.request( options, function( response ) {
response.on( 'error', function( error ) {
if ( callback ) {
callback( error );
}
} );
response.on( 'data', function( _buffer ) {
buffer = buffer || '';
buffer += _buffer;
} );
response.on( 'end', function() {
if ( response.statusCode < 200 || response.statusCode >= 400 ) {
var error = {
code: response.statusCode,
body: buffer
};
if ( buffer.length ) {
try {
var parsed = JSON.parse( buffer );
error = extend( error, parsed );
}
catch( ex ) {
// do nothing if we can't parse the buffer as JSON
}
}
if ( callback ) {
callback( error );
}
return;
}
var obj;
try {
obj = JSON.parse( buffer );
}
catch( ex ) {
if ( callback ) {
callback( ex, buffer );
}
}
if ( callback ) {
callback( null, obj );
}
} );
} );
if ( dataString ) {
request.write( dataString );
}
request.end();
};