express启动时缓存资源

Cache resource on startup of express

本文关键字:资源 缓存 启动 express      更新时间:2023-09-26

我想知道是否有人能帮我指出如何在启动web服务器时在express/node中缓存资源。myCol.find非常昂贵,所以我只想在启动时运行一次,并为所有后续请求缓存结果。有没有一个我可以参与的启动步骤?这可以在服务器开始接受请求之前同步完成吗?

我有下面的代码,但我想引用一个缓存的变量,而不是mongo-db

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);

是的,您只需要确保您的服务器在通过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);
});

您可以交换myCol.find和路由处理程序的顺序,以便相关代码为:

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

这仍然是异步的,但服务器只有在find操作完成后才能做出响应。