使用 nodejs 和 lokijs 重新组织简单的应用程序
Reorganize simple app with nodejs and lokijs
这是我的第一个 node.js 应用程序。我使用 http://www.nodebeginner.org/ as example and http://lokijs.org/ 作为内存数据库。
所以,我对代码组织有疑问。现在看起来像下面这样:
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。这对我来说似乎不是很好的解决方案。
有人可以帮我吗?提前致谢。
我在编写 snaptun
(LokiJS 的 http 服务器包装器,仍在开发中)时遇到了同样的问题。我发现最好的解决方案是创建一个函数,该函数采用 db
参数来生成所有路由(因此 db
仅传递一次并以闭包方式保留)所以在我的 index.js 我最终得到:
var db = new loki(file, {
autoload: false
}),
routes = require('./routes')(db);
自然地 routes.js
需要导出函数而不是对象。
我使用 express 所以在我的例子中我可以简单地迭代 routes
数组并以编程方式设置路由。
这是包含 WIP 作品的回购:snaptun
这是我的第一个 node.js 应用程序。我使用 http://www.nodebeginner.org/ as example and http://lokijs.org/ 作为内存数据库。 所以,我对代码组织有疑问。现在看起来像下面这样:
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。这对我来说似乎不是很好的解决方案。
有人可以帮我吗?提前致谢。
我在编写 snaptun
(LokiJS 的 http 服务器包装器,仍在开发中)时遇到了同样的问题。我发现最好的解决方案是创建一个函数,该函数采用 db
参数来生成所有路由(因此 db
仅传递一次并以闭包方式保留)所以在我的 index.js 我最终得到:
var db = new loki(file, {
autoload: false
}),
routes = require('./routes')(db);
自然地 routes.js
需要导出函数而不是对象。
我使用 express 所以在我的例子中我可以简单地迭代 routes
数组并以编程方式设置路由。
这是包含 WIP 作品的回购:snaptun