48 lines
1.7 KiB
JavaScript
48 lines
1.7 KiB
JavaScript
var Timeout = require('node-timeout');
|
|
var request = require('request');
|
|
|
|
module.exports = function () {
|
|
// Converts an array [["param","val1"], ["param","val2"]] into param=val1¶m=val2
|
|
this.paramsToString = (params) => {
|
|
var kvPairs = params.map((kv) => kv[0].toString() + '=' + kv[1].toString());
|
|
var url = kvPairs.length ? kvPairs.join('&') : '';
|
|
return url.trim();
|
|
};
|
|
|
|
this.sendRequest = (baseUri, parameters, callback) => {
|
|
var limit = Timeout(this.OSRM_TIMEOUT, { err: { statusCode: 408 } });
|
|
|
|
var runRequest = (cb) => {
|
|
var params = this.paramsToString(parameters);
|
|
|
|
this.query = baseUri + (params.length ? '?' + params : '');
|
|
|
|
var options = this.httpMethod === 'POST' ? {
|
|
method: 'POST',
|
|
body: params,
|
|
url: baseUri
|
|
} : this.query;
|
|
|
|
request(options, (err, res, body) => {
|
|
if (err && err.code === 'ECONNREFUSED') {
|
|
throw new Error('*** osrm-routed is not running.');
|
|
} else if (err && err.statusCode === 408) {
|
|
throw new Error();
|
|
}
|
|
|
|
return cb(err, res, body);
|
|
});
|
|
};
|
|
|
|
runRequest(limit((err, res, body) => {
|
|
if (err) {
|
|
if (err.statusCode === 408)
|
|
return callback(this.RoutedError('*** osrm-routed did not respond'));
|
|
else if (err.code === 'ECONNREFUSED')
|
|
return callback(this.RoutedError('*** osrm-routed is not running'));
|
|
}
|
|
return callback(err, res, body);
|
|
}));
|
|
};
|
|
};
|