57 lines
1.1 KiB
JavaScript
57 lines
1.1 KiB
JavaScript
'use strict'
|
|
|
|
const MongoClient = require('mongodb').MongoClient
|
|
const express = require('express')
|
|
const LRU = require('lru-cache')
|
|
const fastq = require('fastq')
|
|
const app = express()
|
|
|
|
var url = 'mongodb://localhost:27017/test';
|
|
|
|
function sum (data) {
|
|
var sum = 0
|
|
const l = data.length
|
|
for (var i = 0; i < l; i++) {
|
|
sum += data[i].value
|
|
}
|
|
return sum
|
|
}
|
|
|
|
MongoClient.connect(url, function(err, db) {
|
|
if (err) { throw err }
|
|
const collection = db.collection('data')
|
|
const queue = fastq(work)
|
|
const cache = LRU({
|
|
maxAge: 1000 * 5 // 5 seconds
|
|
})
|
|
|
|
function work (req, done) {
|
|
const elem = cache.get('average')
|
|
if (elem) {
|
|
done(null, elem)
|
|
return
|
|
}
|
|
collection.find({}).toArray(function (err, data) {
|
|
if (err) {
|
|
done(err)
|
|
return
|
|
}
|
|
const result = sum(data) / data.length
|
|
cache.set('average', result)
|
|
done(null, result)
|
|
})
|
|
}
|
|
|
|
app.get('/hello', (req, res) => {
|
|
queue.push(req, function (err, result) {
|
|
if (err) {
|
|
res.send(err.message)
|
|
return
|
|
}
|
|
res.send('' + result)
|
|
})
|
|
})
|
|
|
|
app.listen(3000)
|
|
})
|