router.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. 'use strict'
  2. var Router ={
  3. go:function(res,req){
  4. let query = URLParse.query;
  5. if(enterURI.match(WhiteList.HandlerRules)){
  6. return Router.getHandler(url,res,req);
  7. }else if(enterURI.match(WhiteList.StaticRules)){
  8. return STATIC.load(ROOTPATH+URLParse.pathname,query,res);
  9. }else{
  10. Router._error('Router Go ERROR:'+url,res);
  11. Logger.error(url+' WhiteList Check error!');
  12. }
  13. },
  14. getHandler:function(url,res,req){
  15. let URLParse = URL.parse(HANDLERPATH+url,true);
  16. let URLArr = URLParse.pathname.split('/');
  17. if(URLArr[URLArr.length-1]=='') URLArr[URLArr.length-1]='index';
  18. let FileName = URLArr.join('/')+'.js';
  19. let mod,call='index';
  20. if(!FILE.existsSync(FileName)){
  21. call = URLArr.pop();
  22. FileName = URLArr.join('/')+'.js';
  23. }
  24. try{
  25. mod = require(FileName);
  26. if(mod['__construct']){
  27. let cons = mod['__construct'](res,req,URLParse.query);
  28. if(cons && cons.status=='error') Router._error('Router Go ERROR:'+cons.msg,res);
  29. }
  30. mod[call](res,req,URLParse.query);
  31. }catch(err){
  32. Logger.error(err);
  33. res.writeHead(404, {'Content-Type': 'text/html'});
  34. res.end('404');
  35. }
  36. },
  37. _error:function(log,res,req){
  38. res.writeHead(404, {'Content-Type': 'text/html'});
  39. res.end('404');
  40. }
  41. };
  42. module.exports = function(req,res){
  43. let URI = req.url=='/'?'/index':req.url;
  44. let URLParse = URL.parse(URI,true);
  45. let URLArr = URLParse.pathname.split('/');
  46. let enterURI = String(URLArr[1])==''?'index':String(URLArr[1]);
  47. let isAsset = enterURI==Config.asset_path?true:false;
  48. req._GET = URLParse.query;
  49. if(isAsset){
  50. let assetPath = URLArr.join('/').replace('/'+Config.asset_path,'');
  51. Router.goAsset(assetPath,req,res);
  52. return;
  53. }
  54. req._Cookie = {};
  55. req.headers.cookie && req.headers.cookie.split(';').forEach(function(Cookie){
  56. let parts = Cookie.split('=');
  57. let key = parts[0].trim();
  58. let value = (parts[1]||'').trim();
  59. if(parts.length>2){
  60. parts = parts.shift();
  61. value = parts.join('=').trim();
  62. }
  63. req._Cookie[key] = value;
  64. });
  65. Router.goHandler(URLParse.pathname,req,res);
  66. return this;
  67. };