在连接启动时调用db.loadServerScripts

时间:2014-12-13 23:56:36

标签: node.js mongodb

我在system.js集合中有一些server-side helper functions,然后在node.js中使用。但有时,它们是未定义的。

以下是该方案: 我在服务器启动时加载这些函数一次:

db.eval('db.loadServerScripts()', function(err, result) { ... });   

所以这只在启动时调用一次,而不是每次请求都被调用。

从现在开始,我可以打电话,例如:

db.eval('getNextSequence(\'test\')', function(err, seq){});

但有时我得到错误,getNextSequence未定义。我怀疑这些功能只存在于当前连接范围内。因此,当节点收到新连接时,可能没有设置功能。<​​/ p>

有没有办法在node.js中使用这些函数,但始终可靠地使用它们?


示例场景:

//1./ this function is stored in system.js
getNextSequence: function(name) 
{
    var ret = db.counters.findAndModify({
        query: { _id: name },
        update: { $inc: { seq: 1 } },
        new: true,
        upsert: true
    });
    return ret ? ret.seq : null;
}

//2./ this is called on nodejs server startup (once for server lifetime)
var mongo = require('mongoskin');
var db = mongo.db("mongodb://localhost:27017/mydb", {native_parser:true});
//...
db.eval('db.loadServerScripts()', function(err, result) {
    //...crash if failed
}); 

//3./ this is used in node.js code, on request processing:
db.eval('getNextSequence(\'someNamespace\')', function(err, seq){
    // int seq is converted to string slug
    // a new entity with slugId is saved to collection
});

0 个答案:

没有答案