Browse Source

Remove cluster && finish Router class

HonorLee 7 years ago
parent
commit
f6d7baeced
8 changed files with 82 additions and 75 deletions
  1. 3 1
      .gitignore
  2. 5 3
      config.js
  3. 0 24
      master.js
  4. 1 0
      package.json
  5. 38 0
      server.js
  6. 0 38
      server_worker.js
  7. 3 3
      system/core.js
  8. 32 6
      system/lib/core/router.js

+ 3 - 1
.gitignore

@@ -3,4 +3,6 @@ npm-debug.log
 /log
 .idea
 .DS_Store
-/temp
+/temp
+/app
+/asset

+ 5 - 3
config.js

@@ -1,10 +1,12 @@
 global.Config = {
     //Session ExpireTime min.
     SessionExpire : 30,
+    //Asset path
+    asset_path  : 'asset',
     //WhiteList
-    WhiteList : {
-        Static  : /static|images|robots\.txt|crossdomain\.xml|favicon\.ico/,
-        Handler : /index|report/
+    BlackList : {
+        // Static  : /static|images|robots\.txt|crossdomain\.xml|favicon\.ico/,
+        // Handler : /index|report/
     },
     //Mysql config
     mysql_on : false,

+ 0 - 24
master.js

@@ -1,24 +0,0 @@
-/*
-NodeJS-MVC 1.0
---------------------
-HonorLee
-http://honorlee.me
-dev@honorlee.me
-*/
-
-'use strict';
-
-//Master Process
-//DO NOT CHANGE ANYTHING IN THIS FILE!
-
-//Max number of worker,'auto' would be fine
-let max_child_process   = 2;
-//If turn loadBalancing on,master process will forward all request to child process.Recommend NGINX for instant.
-let loadBalancing       = false;
-let child_port_start    = 8000;
-// let socketIO     = require('socket.io')(socketServer);
-
-let childNumber = max_child_process=='auto'?require('os').cpus().length:Number(max_child_process);
-for(let i = 0; i<max_child_process; i++){
-    require('child_process').fork('./server_worker.js',['-p',child_port_start+i]);
-}

+ 1 - 0
package.json

@@ -13,6 +13,7 @@
     "cron": "^1.1.0",
     "date-format": "0.0.2",
     "ejs": "^2.4.2",
+    "formidable": "^1.1.1",
     "fs-extra": "^0.30.0",
     "js-base64": "^2.1.9",
     "md5": "^2.2.1",

+ 38 - 0
server.js

@@ -0,0 +1,38 @@
+/*
+* NodeJS-MVC 1.0
+* --------------------
+* HonorLee
+* http://honorlee.me
+* dev@honorlee.me
+ */
+
+/*
+* Worker Process
+  DO NOT CHANGE ANYTHING IN THIS FILE!
+ */
+global.ROOTPATH = __dirname;
+require('./config.js');
+require('./system/core.js');
+
+let serverPort = 8000;
+
+try{
+    require('http').createServer(serverHandler).listen(serverPort);
+    LOGGER.info('Child Server start at port [' + serverPort + '] | ' + DateFormat('yyyy/MM/dd hh:mm:ss', new Date()));
+}else{
+    LOGGER.error('Child Server failed start at port [' + serverPort + '] | ' + DateFormat('yyyy/MM/dd hh:mm:ss', new Date()));
+}
+
+
+function serverHandler(req,res){
+    if(req.method.toLowerCase()=='post'){
+        let form = new Formidable.IncomingForm();
+        form.parse(req, function(err, fields, files) {
+            req._POST = fields;
+            new ROUTER(req,res);
+        });
+    }else{
+        new ROUTER(req,res);
+    }
+
+}

+ 0 - 38
server_worker.js

@@ -1,38 +0,0 @@
-/*
-* NodeJS-MVC 1.0
-* --------------------
-* HonorLee
-* http://honorlee.me
-* dev@honorlee.me
- */
-
-/*
-* Worker Process
-  DO NOT CHANGE ANYTHING IN THIS FILE!
- */
-global.ROOTPATH = __dirname;
-require('./config.js');
-require('./system/core.js');
-Commander
-    .version('1.0.0')
-    .option('-p, --port [type]', 'server port')
-    .parse(process.argv);
-
-let serverPort = Number(Commander.port);
-if(!serverPort || serverPort==0){
-    LOGGER.error('Child Server start faile port ['+serverPort+'] | '+DateFormat('yyyy/MM/dd hh:mm:ss',new Date()));
-}
-
-require('http').createServer(serverHandler).listen(serverPort);
-LOGGER.info('Child Server start at port [' + serverPort + '] | ' + DateFormat('yyyy/MM/dd hh:mm:ss', new Date()));
-
-function serverHandler(req,res){
-    // var COOKIE = {};
-    // req.headers.cookie && req.headers.cookie.split(';').forEach(function(Cookie){
-    //     let parts = Cookie.split('=');
-    //     COOKIE[parts[0].trim()] = (parts[1]||'').trim();
-    // });
-    // req.cookie = COOKIE;
-    // ROUTER.go(res,req);
-    console.log(serverPort);
-}

+ 3 - 3
system/core.js

@@ -11,11 +11,10 @@ global.Core.Path = {
     Module      : ROOTPATH + '/app/modules',
     Handler     : ROOTPATH + '/app/handlers',
     View        : ROOTPATH + '/app/view',
-    Static      : ROOTPATH + '/app/static',
     Temp        : ROOTPATH + '/temp',
     Session     : ROOTPATH + '/temp/session',
-    Log         : ROOTPATH + '/log'
-
+    Log         : ROOTPATH + '/log',
+    Asset       : ROOTPATH + '/' + Config.asset_path
 };
 
 //Global Extension Require
@@ -27,6 +26,7 @@ global.ASYNC        = require('async');
 global.Base64       = require('js-base64');
 global.MD5          = require('md5');
 global.DateFormat   = require('date-format');
+global.Formidable   = require('formidable');
 global.Tracer       = require('tracer').dailyfile({root:Core.Path.Log,format : "{{timestamp}} <{{title}}> {{file}}:{{line}} {{message}}", dateformat : "HH:MM:ss.L"});
 
 //System Library load

+ 32 - 6
system/lib/core/router.js

@@ -1,12 +1,11 @@
 'use strict'
 var Router ={
     go:function(res,req){
-        let url = req.url=='/'?'/index':req.url;
-        let URLParse = URL.parse(url,true);
-        let URLArr = URLParse.pathname.split('/');
+
+
+
         let query = URLParse.query;
-        let enterURI = String(URLArr[1]);
-        if(enterURI=='') enterURI='index';
+
 
         if(enterURI.match(WhiteList.HandlerRules)){
             return Router.getHandler(url,res,req);
@@ -46,4 +45,31 @@ var Router ={
     }
 };
 
-module.exports = Router;
+module.exports = function(req,res){
+    let URI       = req.url=='/'?'/index':req.url;
+    let URLParse  = URL.parse(URI,true);
+    let URLArr    = URLParse.pathname.split('/');
+    let enterURI  = String(URLArr[1])==''?'index':String(URLArr[1]);
+    let isAsset   = enterURI==Config.asset_path?true:false;
+
+    req._GET = URLParse.query;
+    if(isAsset){
+        let assetPath = URLArr.join('/').replace('/'+Config.asset_path,'');
+        Router.goAsset(assetPath,req,res);
+        return;
+    }
+    req._Cookie = {};
+    req.headers.cookie && req.headers.cookie.split(';').forEach(function(Cookie){
+        let parts = Cookie.split('=');
+        let key   = parts[0].trim();
+        let value = (parts[1]||'').trim();
+        if(parts.length>2){
+            parts = parts.shift();
+            value = parts.join('=').trim();
+        }
+        req._Cookie[key] = value;
+    });
+
+    Router.goHandler(URLParse.pathname,req,res);
+    return this;
+};