-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
55 lines (46 loc) · 1.44 KB
/
index.js
File metadata and controls
55 lines (46 loc) · 1.44 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
#!/usr/bin/env node
const fs = require("fs");
const express = require("express");
const bodyParser = require("body-parser");
const port = process.env.PORT | 8080;
const dir = `${process.cwd()}/api`;
const lambdas = {};
/** Lambda function loader **/
let lastModified = 0;
const loader = () => {
const currentLastModified = fs.readdirSync(dir).map(file => fs.statSync(`${dir}/${file}`).mtimeMs).reduce((acc, cur) => Math.max(acc, cur), 0);
if (currentLastModified > lastModified) {
lastModified = currentLastModified;
Object.keys(lambdas).forEach(function(key) { delete lambdas[key]; });
fs.readdirSync(dir).forEach(file => {
const match = /^(.*)\.js$/.exec(file);
if (match) {
const url = `/api/${match[1]}`;
delete require.cache[`${dir}/${file}`];
lambdas[url] = require(`${dir}/${file}`);
process.stdout.write(`Created route ${url}\n`);
}
});
}
}
setInterval(loader, 1000);
setImmediate(loader);
/** Express server **/
const app = express();
app.use(bodyParser.json());
app.use((req, res) => {
if (lambdas.hasOwnProperty(req.path)) {
try {
const result = lambdas[req.path](req, res);
if (result.catch) {
result.catch(e => res.status(500).send(e.message));
}
} catch(e) {
res.status(500).send(e.message);
}
} else {
res.status(404).send("Not found");
}
});
app.listen(port);
process.stdout.write(`Server listening on port ${port}\n`);