|
|
|
@ -9,7 +9,14 @@ var app = express(); |
|
|
|
|
|
|
|
|
|
|
|
app.use(bodyParser.urlencoded({ extended: true })); |
|
|
|
app.use(bodyParser.urlencoded({ extended: true })); |
|
|
|
|
|
|
|
|
|
|
|
var CACHE = new LRU(30); |
|
|
|
var MODELS = {}; |
|
|
|
|
|
|
|
var CACHE = new LRU({ |
|
|
|
|
|
|
|
max: 50, |
|
|
|
|
|
|
|
dispose: key => { |
|
|
|
|
|
|
|
MODELS[key].save(); |
|
|
|
|
|
|
|
delete MODELS[key]; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
var getTimeStamp = () => { |
|
|
|
var getTimeStamp = () => { |
|
|
|
var timestamp = new Date().getTime(); |
|
|
|
var timestamp = new Date().getTime(); |
|
|
|
@ -68,27 +75,38 @@ app.get(/\/([a-z0-9]+\/export)/, function (req, res) { |
|
|
|
|
|
|
|
|
|
|
|
app.get(/\/([a-z0-9]+\/stats)/, function (req, res) { |
|
|
|
app.get(/\/([a-z0-9]+\/stats)/, function (req, res) { |
|
|
|
var link = req.params["0"].replace("/stats", ""); |
|
|
|
var link = req.params["0"].replace("/stats", ""); |
|
|
|
storage.getNote(link).then(note => note |
|
|
|
var promise = link in MODELS |
|
|
|
? res.send(view.buildStats(note)) |
|
|
|
? new Promise(resolve => resolve(MODELS[link])) |
|
|
|
|
|
|
|
: storage.getNote(link); |
|
|
|
|
|
|
|
promise.then(note => note |
|
|
|
|
|
|
|
? res.send(view.renderStats(note)) |
|
|
|
: notFound(res)); |
|
|
|
: notFound(res)); |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
app.get(/\/([a-z0-9]+)/, function (req, res) { |
|
|
|
app.get(/\/([a-z0-9]+)/, function (req, res) { |
|
|
|
var link = req.params["0"]; |
|
|
|
var link = req.params["0"]; |
|
|
|
if (CACHE.has(link)) res.send(CACHE.get(link)); |
|
|
|
if (CACHE.has(link)) { |
|
|
|
else storage.getNote(link).then(note => { |
|
|
|
(link in MODELS) && MODELS[link].views++; |
|
|
|
|
|
|
|
res.send(CACHE.get(link)); |
|
|
|
|
|
|
|
} else storage.getNote(link).then(note => { |
|
|
|
if (!note) return notFound(res); |
|
|
|
if (!note) return notFound(res); |
|
|
|
var content = view.buildNote(note); |
|
|
|
var content = view.renderNote(note); |
|
|
|
CACHE.set(link, content); |
|
|
|
CACHE.set(link, content); |
|
|
|
|
|
|
|
MODELS[link] = note; |
|
|
|
res.send(content); |
|
|
|
res.send(content); |
|
|
|
}); |
|
|
|
}); |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
var sendResponse = (res, code, message) => |
|
|
|
var sendResponse = (res, code, message) => |
|
|
|
res.status(code).send(view.buildPage(message, "<h1>" + message + "</h1>", "")); |
|
|
|
res.status(code).send(view.renderPage(message, "<h1>" + message + "</h1>", "")); |
|
|
|
|
|
|
|
|
|
|
|
var notFound = res => sendResponse(res, 404, "Not found"); |
|
|
|
var notFound = res => sendResponse(res, 404, "Not found"); |
|
|
|
|
|
|
|
|
|
|
|
var server = app.listen(3000, function () { |
|
|
|
var server = app.listen(3000, function () { |
|
|
|
console.log('NoteHub server listening on port %s', server.address().port); |
|
|
|
console.log('NoteHub server listening on port %s', server.address().port); |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
setInterval(() => { |
|
|
|
|
|
|
|
console.log("saving stats..."); |
|
|
|
|
|
|
|
Object.keys(MODELS).forEach(id => MODELS[id].save()) |
|
|
|
|
|
|
|
}, 60 * 5 * 1000); |