这是我的第一个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提前。
答案 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