-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathapp.js
More file actions
executable file
·98 lines (74 loc) · 1.94 KB
/
app.js
File metadata and controls
executable file
·98 lines (74 loc) · 1.94 KB
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
'use strict';
const BitScoop = require('bitscoop-sdk');
const config = require('config');
const express = require('express');
const httpErrors = require('http-errors');
let bitscoop = new BitScoop(config.bitscoop.apiKey);
let services = {};
for (let name in config.services) {
if (!config.services.hasOwnProperty(name)) {
break;
}
let serviceConfig = config.services[name];
services[name] = {
connector: bitscoop.api(serviceConfig.mapId),
callOptions: serviceConfig.callOptions
}
}
let app = express();
// Disable insecure header information.
app.disable('x-powered-by');
app.use('/:service/:endpoint', function(req, res, next) {
let service = req.params.service;
let endpoint = req.params.endpoint;
if (!services.hasOwnProperty(service)) {
return next(httpErrors(404, 'Service not found.'));
}
console.debug(`Calling ${req.params.endpoint} for service ${req.params.service}...`);
services[service].connector
.endpoint(endpoint)
.method(req.method)(services[service].callOptions)
.then(function(result) {
let [body, ] = result;
res.json(body);
})
.catch(function(err) {
next(err);
});
});
app.use(function(req, res) {
if (!res.finished) {
res.status(404);
res.json({
code: 404,
message: 'Resource not found.'
});
}
});
app.use(function(err, req, res, next) {
let code = (err instanceof httpErrors.HttpError) ? err.status : 500;
console.error(err);
if (!res.finished) {
res.status(code);
res.json({
code: code,
message: (err instanceof httpErrors.HttpError) ? err.message : 'Internal server error.'
});
}
});
(async function() {
try {
let server = await new Promise(function(resolve, reject) {
let server = app.listen(8080, 'localhost');
server.once('listening', function() {
resolve(server);
});
server.once('error', reject);
});
console.info('HTTP server listening.', server.address());
return server;
} catch(err) {
console.error(err);
process.exit(1);
}
})();