forked from conwetlab/ngsijs
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathngsi-node.js
135 lines (116 loc) · 3.66 KB
/
ngsi-node.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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
"use strict";
var http = require('http'),
https = require('https');
var Response = function Response(message, body) {
Object.defineProperties(this, {
status: {value: message.statusCode},
statusText: {value: message.statusMessage},
responseText: {value: body}
});
this.headers = message.headers;
};
Response.prototype.getHeader = function getHeader(name) {
name = String(name).toLowerCase();
if (this.headers[name] != null) {
return this.headers[name];
} else {
return null;
}
};
var toQueryString = function toQueryString(parameters) {
var key, query = [];
if (parameters == null) {
return null;
} else if (typeof parameters === 'string') {
parameters = parameters.trim();
if (parameters !== '') {
return parameters;
} else {
return null;
}
} else /* if (typeof parameters === 'object') */ {
for (key in parameters) {
if (typeof parameters[key] === 'undefined') {
continue;
} else if (parameters[key] === null) {
query.push(encodeURIComponent(key) + '=');
} else {
query.push(encodeURIComponent(key) + '=' + encodeURIComponent(parameters[key]));
}
}
}
if (query.length > 0) {
return query.join('&');
} else {
return null;
}
};
/* makeRequest for Node.js */
var makeRequest = function makeRequest(url, options) {
if (options.requestHeaders == null || typeof options.requestHeaders !== 'object') {
options.requestHeaders = {
Accept: 'application/json'
};
}
// Headers
if (options.postBody != null) {
options.requestHeaders['Content-Type'] = 'application/json';
options.requestHeaders['Content-Length'] = Buffer.byteLength(options.postBody);
}
// parameters
var querystring = toQueryString(options.parameters);
if (querystring != null) {
if (url.search.length > 0) {
url.search += '&' + querystring;
} else {
url.search += '?' + querystring;
}
}
return new Promise(function (resolve, reject) {
var handler = url.protocol === "http:" ? http : https;
var request = handler.request({
method: options.method,
hostname: url.hostname,
protocol: url.protocol,
port: url.port,
path: url.pathname + url.search,
headers: options.requestHeaders
}, function (response) {
response.setEncoding('utf8');
var buf = '';
response.on('data', function (chunck) { buf += chunck; });
response.on('end', function () {
resolve(new Response(response, buf));
});
});
request.on('error', (e) => {
if (e != null && "message" in e) {
reject(new NGSI.ConnectionError(e.message));
} else {
reject(new NGSI.ConnectionError(String(e)));
}
});
if (options.postBody != null) {
request.write(options.postBody);
}
request.end();
});
};
/* NGSI */
var NGSI = require('./NGSI');
var old_Connection = NGSI.Connection;
NGSI.Connection = function Connection(url, options) {
if (options == null) {
options = {}
}
if (!('requestFunction' in options)) {
options.requestFunction = makeRequest;
}
old_Connection.call(this, url, options);
};
NGSI.Connection.prototype = old_Connection.prototype;
NGSI.Connection.V2 = old_Connection.V2;
/* exports */
for (var key in NGSI) {
exports[key] = NGSI[key];
}