使用nodejs和lokijs重新组织简单的应用程序

时间:2015-08-01 09:47:39

标签: javascript node.js refactoring lokijs

这是我的第一个node.js应用。我使用http://www.nodebeginner.org/作为示例,使用http://lokijs.org/作为内存中的数据库。 所以,我有代码orgatization的问题。现在看起来如下:

index.js

var server = require('./server');
var router=require('./router');
var reqHandler=require('./handler');

var loki=require('lokijs');
var db = new loki('world.json');

var handle={
    '/getById':reqHandler.getById
};
db.loadDatabase({},function(){
    server.start(router.route, handle,db)
});

server.js

var http = require('http');
var url = require('url');

function start(route,handle,db){
    http.createServer(function (req, res) {
            route(req, res, handle,db);
    }).listen(8080);
}

exports.start=start;

router.js

var url = require('url');

function route(req,res,handle,db) {
    var pathname = url.parse(req.url).pathname;
    if (typeof handle[pathname] === 'function') {
        handle[pathname](res, req,db);
    } else {
        //process error
    }
}

exports.route = route;

handler.js

var url = require('url');
var loki=require('lokijs');
var querystring=require('querystring');

function getById(res, req,db){
    //process req. send response
    //HERE db MUST BE ACCESSIBLE
}

exports.getById=getById;

使用当前代码结构,我必须将db变量从最开始的index.js传递到最后一个handler.js。对我来说这似乎不是一个好的解决方案。

有人可以帮我吗? Thx提前。

1 个答案:

答案 0 :(得分:0)

在编写snaptun(LokiJS的http服务器包装器,它仍在进行中)时遇到了同样的问题。我发现最好的解决方案是创建一个函数,该函数使用db参数生成所有路由(因此db仅传递一次并以闭包方式保留)所以在我的index.js中结束了:

var db = new loki(file, {
    autoload: false
  }),
  routes = require('./routes')(db);

自然routes.js需要导出函数而不是对象。 我使用express,所以在我的情况下,我可以简单地迭代routes数组并以编程方式设置路由。 这是包含WIP工作的仓库:snaptun