2014-10-25 2 views
0

Мне интересно, может ли кто-нибудь помочь мне указать, как кэшировать ресурс в express/node при запуске веб-сервера. MyCol.find очень дорог, поэтому я хотел бы просто запустить его один раз при запуске и кэшировать результат для всех последующих запросов. Есть ли начальный шаг, на который я могу связать? Можно ли это сделать синхронно до того, как сервер начнет принимать запросы?Ресурс кэша при запуске экспресс

У меня есть следующий код, но хотел бы сослаться на кэшированные переменную вместо Монго дб

var express = require('express'); 
var app  = express(); 

var mongoose = require('mongoose'); 
mongoose.connect('mongodb://localhost:27017/test'); 

var myCol = require('./customModule'); 

var port = process.env.PORT || 8080; 

var router = express.Router(); 

router.get('/test/:testId', function(req, res) { 
    myCol.find(function(err, allResults) { 
     res.json(allResults); 
    }); 
}); 

app.use('/api', router); 

app.listen(port); 

ответ

0

Да, вы просто должны убедиться, что ваш сервер начинает слушать после того, как вы принес свои результаты через myCol.find():

var express = require('express'); 
var app  = express(); 

var mongoose = require('mongoose'); 
mongoose.connect('mongodb://localhost:27017/test'); 

var myCol = require('./customModule'); 

var port = process.env.PORT || 8080; 

var router = express.Router(); 

var myResultsCache; 

router.get('/test/:testId', function(req, res) { 
    res.send(myResultsCache); 
}); 

app.use('/api', router); 

myCol.find(function(err, allResults) { 
    //you should add some error handling here 
    myResultsCache = allResults; 
    app.listen(port); 
}); 
+0

Да. Мне нравится эта идея. – user4131376

0

Вы можете обменять порядок myCol.find и обработчик маршрута, так что соответствующий код будет выглядеть так:

myCol.find(function(error, results) { 
    if (error) throw error; 
    router.get('/test/:testId', function (request, response) { 
    response.json(results); 
    }); 
}); 

Это еще асинхронное, но сервер будет только в состоянии реагировать после операции find была сделана.

+0

Похоже, что это будет работать, а – user4131376