'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) })