在弄清楚javascript和node.js原理前,一上来就用各种大型框架,初学者会走很多弯路。 比如session管理,写个session类,用内存来管理,一般就足够应用了 - 不过本贴不涉及这块。
//app.js --非常简单 var http=require('http') ,path=require('path') ,fs=require('fs') ,route=require('./route.js') ;
var session=new (require('./session'))();
http.createServer(function(request,response){ route(request,response,session);
}).listen(3000);
//session.js function session(){ var sessions=[]; this.signIn(...){...} this.signOut(...){...} this.isInSession(...){...} } 下面推荐的是一种路由方式,仅供参考。
//route.js module.exports=function(req,res,session){ switch(req.url){ case '/signin': //主页 错误页面 登入登出等 ... break; case '/signout': ... break; case /file#...: returnFile(req,res,session); ... break;
default:
returnData(req,res,session);
break;
}
}
//用来处理文件请求
function returnFile(req,res){ .... *html, images, css, *.js.... }
function returnData(req,res){ if(session.isInSession(req){ //检查是否登录(或者检查用户是否在权限范围内的类) var sql_json=JSON.parse(querystring.parse(url.parse(req.url).query)['q']); routes[sql_json.m][sql_json.a](sql_json.v,function(err,data){ ....
});
}else{
...
}
} var routes={ "module1":{ "action1":function(v,cb){require('module1.js').fn_a(v,cb);} "action2":function(v,cb){require('module1.js').fn_b(v,cb);} } ,"module2":{ "action1":function(v,cb){require('module2.js').fn_a(v,cb);} "action2":function(v,cb){require('module2.js').fn_b(v,cb);} } ..... }
//module1.js 实现数据增删改查及业务逻辑的模块 var mysql=require('...'); function fn_a(v,cb){...cb();} function fn_b(v,cb){...cb();} exports.fn_a=fn_a; exports.fn_b=fn_b;