保持变量加载/缓存,以便多个请求可以使用它们。

时间:2013-12-23 16:51:06

标签: javascript node.js caching

我不确定这是否可行,我假设这样的事情。我有几个包含一系列JSON对象的JSON文件,每个对象都有一个唯一的ID。我希望能够使用Node应用程序来读取这些对象,并返回ID大于提供的参数的所有对象。

即。 / after / 20将返回ID大于20的文件中的所有JSON对象。

许多不同的用户会经常发生这些请求。因此,我想知道是否有办法以某种方式存储或缓存这些文件,这意味着它们不需要重复加载。因此,使过程更快更有效。

2 个答案:

答案 0 :(得分:1)

这是一个将整个数据集保存在内存中的解决方案。我假设您至少有节点0.5(到require json),两个json文件名为json1json2,我将使用express因为它的路由。

var express = require('express'),
http = require('http'),
json1 = require('./json1.json'),
json2 = require('./json2.json');

var app = express();

//Express config

app.configure(function(){
    app.set('port', 8080 );
    //...
    app.use(express.bodyParser());
    app.use(express.methodOverride());
    //Right before the router, add a middleware to expose your objects
    app.use(function(err, req, res, next){
        req.json1 = json1;
        req.json2 = json2;
        next();
    });
    app.use(app.router);
    //...
});

最后,任何路由器都可以访问这两个json对象。

app.get('/after/:id', function(req, res){
    var objects = req.json1,
        id = req.params.id,
        result = objects.filter(function(obj){ return obj.id >= id; });
    res.json(200, result);
});

答案 1 :(得分:0)

据我所知,如果你使用node.js的“require”函数来加载模块(或者你的情况下是JSON文件),它会根据文件名进行缓存。

请参阅Node.JS API Doc

我在一个包含许多小文件的项目中使用这种技术,它们在第一次加载后都会被缓存。