mirror of
https://github.com/coderaiser/cloudcmd.git
synced 2026-01-23 18:55:26 +00:00
feature(route) add
This commit is contained in:
parent
3a55b9fa57
commit
889d66e75a
3 changed files with 210 additions and 204 deletions
197
cloudcmd.js
197
cloudcmd.js
|
|
@ -2,42 +2,20 @@
|
|||
'use strict';
|
||||
|
||||
var DIR = __dirname + '/',
|
||||
DIR_HTML = DIR + 'html/',
|
||||
DIR_LIB = DIR + 'lib/',
|
||||
DIR_SERVER = DIR + 'lib/server/',
|
||||
DIR_FS = DIR_HTML + 'fs/',
|
||||
|
||||
fs = require('fs'),
|
||||
|
||||
win = require(DIR_SERVER + 'win'),
|
||||
main = require(DIR_SERVER + 'main'),
|
||||
mellow = require(DIR_SERVER + 'mellow'),
|
||||
ponse = require(DIR_SERVER + 'ponse'),
|
||||
files = require(DIR_SERVER + 'files'),
|
||||
update = require(DIR_SERVER + 'update'),
|
||||
minify = require(DIR_SERVER + 'minify'),
|
||||
tryRequire = require(DIR_SERVER + 'tryRequire'),
|
||||
|
||||
Util = require(DIR_LIB + 'util'),
|
||||
CloudFunc = require(DIR_LIB + 'cloudfunc'),
|
||||
server = require(DIR_LIB + 'server'),
|
||||
format = require(DIR_LIB + 'format'),
|
||||
|
||||
Config = main.config,
|
||||
|
||||
PATH_INDEX = DIR_FS + 'index.html',
|
||||
|
||||
TMPL_PATH = [
|
||||
'file',
|
||||
'panel',
|
||||
'path',
|
||||
'pathLink',
|
||||
'link',
|
||||
],
|
||||
|
||||
Template = {},
|
||||
|
||||
FS = CloudFunc.FS;
|
||||
Config = main.config;
|
||||
|
||||
exports.start = function(params) {
|
||||
readConfig(function(error, config) {
|
||||
|
|
@ -63,44 +41,7 @@
|
|||
win.prepareCodePage();
|
||||
};
|
||||
|
||||
/**
|
||||
* additional processing of index file
|
||||
*/
|
||||
function indexProcessing(options) {
|
||||
var keysPanel, left, right,
|
||||
LEFT = CloudFunc.PANEL_LEFT,
|
||||
RIGHT = CloudFunc.PANEL_RIGHT,
|
||||
data = options.data,
|
||||
panel = options.panel;
|
||||
|
||||
if (!Config.showKeysPanel) {
|
||||
keysPanel = '<div class="keyspanel';
|
||||
data = data.replace(keysPanel + '"', keysPanel +' hidden"');
|
||||
}
|
||||
|
||||
left = Util.render(Template.panel, {
|
||||
id : LEFT,
|
||||
side : 'left',
|
||||
content : panel
|
||||
});
|
||||
|
||||
right = Util.render(Template.panel, {
|
||||
id : RIGHT,
|
||||
side : 'right',
|
||||
content : panel
|
||||
});
|
||||
|
||||
data = Util.render(data, {
|
||||
title : CloudFunc.getTitle(),
|
||||
fm : left + right
|
||||
});
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
function init(config) {
|
||||
var paramsStart;
|
||||
|
||||
Util.log('server dir: ' + DIR);
|
||||
|
||||
if (update)
|
||||
|
|
@ -120,141 +61,7 @@
|
|||
writeLogsToFile();
|
||||
}
|
||||
|
||||
paramsStart = {
|
||||
route : route
|
||||
};
|
||||
|
||||
readFiles(paramsStart, function(params) {
|
||||
server.start(params);
|
||||
});
|
||||
}
|
||||
|
||||
function readFiles(params, callback) {
|
||||
var filesList, paths = {};
|
||||
|
||||
filesList = TMPL_PATH.map(function(name) {
|
||||
var path = DIR_FS + name + '.html';
|
||||
|
||||
paths[path] = name;
|
||||
|
||||
return path;
|
||||
});
|
||||
|
||||
files.read(filesList, 'utf8', function(error, files) {
|
||||
var status, msg, names;
|
||||
|
||||
if (error) {
|
||||
Util.log(error);
|
||||
} else {
|
||||
status = 'ok';
|
||||
|
||||
Object.keys(files).forEach(function(path) {
|
||||
var name = paths[path];
|
||||
|
||||
Template[name] = files[path];
|
||||
});
|
||||
|
||||
names = TMPL_PATH.map(function(item) {
|
||||
return item + '.html';
|
||||
});
|
||||
|
||||
msg = CloudFunc.formatMsg('read', names, status);
|
||||
Util.log(msg);
|
||||
}
|
||||
|
||||
callback(params);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* routing of server queries
|
||||
*/
|
||||
function route(request, response, callback) {
|
||||
var name, p, isAuth, isFS, path;
|
||||
|
||||
if (request && response) {
|
||||
name = ponse.getPathName(request);
|
||||
isAuth = Util.strCmp(name, ['/auth', '/auth/github']);
|
||||
isFS = Util.strCmp(name, '/') || Util.isContainStrAtBegin(name, FS);
|
||||
|
||||
p = {
|
||||
request : request,
|
||||
response : response,
|
||||
gzip : true,
|
||||
name : name
|
||||
};
|
||||
|
||||
if (!isAuth && !isFS)
|
||||
Util.exec(callback);
|
||||
else if (isAuth) {
|
||||
Util.log('* Routing' + '-> ' + name);
|
||||
|
||||
p.name = DIR_HTML + name + '.html';
|
||||
ponse.sendFile(p);
|
||||
} else if (isFS) {
|
||||
name = Util.rmStrOnce(name, CloudFunc.FS) || main.SLASH;
|
||||
path = mellow.convertPath(name);
|
||||
|
||||
mellow.read(path, function(error, dir) {
|
||||
if (dir)
|
||||
dir.path = format.addSlashToEnd(name);
|
||||
|
||||
if (error)
|
||||
if (error.code !== 'ENOTDIR')
|
||||
ponse.sendError(error, p);
|
||||
else
|
||||
fs.realpath(path, function(error, pathReal) {
|
||||
if (!error)
|
||||
p.name = pathReal;
|
||||
else
|
||||
p.name = path;
|
||||
|
||||
p.gzip = false;
|
||||
ponse.sendFile(p);
|
||||
});
|
||||
else
|
||||
buildIndex(dir, function(error, data) {
|
||||
var NOT_LOG = true;
|
||||
|
||||
p.name = PATH_INDEX;
|
||||
|
||||
if (error)
|
||||
ponse.sendError(error, p);
|
||||
else
|
||||
ponse.send(data, p, NOT_LOG);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function buildIndex(json, callback) {
|
||||
var isMinify = Config.minify;
|
||||
|
||||
Util.exec.if(!isMinify, function(error, name) {
|
||||
fs.readFile(name || PATH_INDEX, 'utf8', function(error, template) {
|
||||
var panel, data;
|
||||
|
||||
if (!error) {
|
||||
panel = CloudFunc.buildFromJSON({
|
||||
data : json,
|
||||
template : Template
|
||||
}),
|
||||
|
||||
data = indexProcessing({
|
||||
panel : panel,
|
||||
data : template,
|
||||
});
|
||||
}
|
||||
|
||||
Util.exec(callback, error, data);
|
||||
});
|
||||
}, function(callback) {
|
||||
minify(PATH_INDEX, {
|
||||
log : true,
|
||||
returnName : true
|
||||
}, callback);
|
||||
});
|
||||
server.start();
|
||||
}
|
||||
|
||||
function readConfig(callback) {
|
||||
|
|
|
|||
|
|
@ -27,7 +27,10 @@
|
|||
minify = require(DIR_SERVER + 'minify'),
|
||||
|
||||
terminal = !WIN ? require(DIR_SERVER + 'terminal') : function() {},
|
||||
|
||||
rest = require(DIR_SERVER + 'rest'),
|
||||
route = require(DIR_SERVER + 'route'),
|
||||
|
||||
join = require(DIR_SERVER + 'join'),
|
||||
ponse = require(DIR_SERVER + 'ponse'),
|
||||
express = require(DIR_SERVER + 'express'),
|
||||
|
|
@ -38,7 +41,7 @@
|
|||
Util.exec(next);
|
||||
},
|
||||
|
||||
webconsole, expressApp, Route;
|
||||
webconsole, expressApp;
|
||||
|
||||
emptyFunc.middle = function() {
|
||||
return emptyFunc;
|
||||
|
|
@ -52,18 +55,12 @@
|
|||
/**
|
||||
* start server function
|
||||
*
|
||||
* @param options
|
||||
*/
|
||||
function start(options) {
|
||||
function start() {
|
||||
var port, ip,
|
||||
HTTP = 'http://',
|
||||
config = main.config;
|
||||
|
||||
if (!options)
|
||||
options = {};
|
||||
|
||||
Route = options.route;
|
||||
|
||||
port = process.env.PORT || /* c9 */
|
||||
process.env.VCAP_APP_PORT || /* cloudfoundry */
|
||||
config.port,
|
||||
|
|
@ -93,7 +90,7 @@
|
|||
|
||||
funcs = [
|
||||
rest,
|
||||
Route,
|
||||
route,
|
||||
|
||||
join({
|
||||
minify: isMinify
|
||||
|
|
|
|||
202
lib/server/route.js
Normal file
202
lib/server/route.js
Normal file
|
|
@ -0,0 +1,202 @@
|
|||
(function() {
|
||||
'use strict';
|
||||
|
||||
var DIR = __dirname + '/../../',
|
||||
DIR_HTML = DIR + 'html/',
|
||||
DIR_LIB = DIR + 'lib/',
|
||||
DIR_SERVER = __dirname + '/',
|
||||
DIR_FS = DIR_HTML + 'fs/',
|
||||
|
||||
fs = require('fs'),
|
||||
|
||||
main = require(DIR_SERVER + 'main'),
|
||||
mellow = require(DIR_SERVER + 'mellow'),
|
||||
ponse = require(DIR_SERVER + 'ponse'),
|
||||
files = require(DIR_SERVER + 'files'),
|
||||
minify = require(DIR_SERVER + 'minify'),
|
||||
|
||||
Util = require(DIR_LIB + 'util'),
|
||||
CloudFunc = require(DIR_LIB + 'cloudfunc'),
|
||||
format = require(DIR_LIB + 'format'),
|
||||
|
||||
Config = main.config,
|
||||
|
||||
PATH_INDEX = DIR_FS + 'index.html',
|
||||
|
||||
TMPL_PATH = [
|
||||
'file',
|
||||
'panel',
|
||||
'path',
|
||||
'pathLink',
|
||||
'link',
|
||||
],
|
||||
|
||||
Template = {},
|
||||
|
||||
FS = CloudFunc.FS;
|
||||
|
||||
module.exports = route;
|
||||
|
||||
readFiles();
|
||||
|
||||
/**
|
||||
* additional processing of index file
|
||||
*/
|
||||
function indexProcessing(options) {
|
||||
var keysPanel, left, right,
|
||||
LEFT = CloudFunc.PANEL_LEFT,
|
||||
RIGHT = CloudFunc.PANEL_RIGHT,
|
||||
data = options.data,
|
||||
panel = options.panel;
|
||||
|
||||
if (!Config.showKeysPanel) {
|
||||
keysPanel = '<div class="keyspanel';
|
||||
data = data.replace(keysPanel + '"', keysPanel +' hidden"');
|
||||
}
|
||||
|
||||
left = Util.render(Template.panel, {
|
||||
id : LEFT,
|
||||
side : 'left',
|
||||
content : panel
|
||||
});
|
||||
|
||||
right = Util.render(Template.panel, {
|
||||
id : RIGHT,
|
||||
side : 'right',
|
||||
content : panel
|
||||
});
|
||||
|
||||
data = Util.render(data, {
|
||||
title : CloudFunc.getTitle(),
|
||||
fm : left + right
|
||||
});
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
function readFiles(callback) {
|
||||
var filesList, paths = {};
|
||||
|
||||
filesList = TMPL_PATH.map(function(name) {
|
||||
var path = DIR_FS + name + '.html';
|
||||
|
||||
paths[path] = name;
|
||||
|
||||
return path;
|
||||
});
|
||||
|
||||
files.read(filesList, 'utf8', function(error, files) {
|
||||
var status, msg, names;
|
||||
|
||||
if (error) {
|
||||
Util.log(error);
|
||||
} else {
|
||||
status = 'ok';
|
||||
|
||||
Object.keys(files).forEach(function(path) {
|
||||
var name = paths[path];
|
||||
|
||||
Template[name] = files[path];
|
||||
});
|
||||
|
||||
names = TMPL_PATH.map(function(item) {
|
||||
return item + '.html';
|
||||
});
|
||||
|
||||
msg = CloudFunc.formatMsg('read', names, status);
|
||||
Util.log(msg);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* routing of server queries
|
||||
*/
|
||||
function route(request, response, callback) {
|
||||
var name, p, isAuth, isFS, path;
|
||||
|
||||
if (request && response) {
|
||||
name = ponse.getPathName(request);
|
||||
isAuth = Util.strCmp(name, ['/auth', '/auth/github']);
|
||||
isFS = Util.strCmp(name, '/') || Util.isContainStrAtBegin(name, FS);
|
||||
|
||||
p = {
|
||||
request : request,
|
||||
response : response,
|
||||
gzip : true,
|
||||
name : name
|
||||
};
|
||||
|
||||
if (!isAuth && !isFS)
|
||||
Util.exec(callback);
|
||||
else if (isAuth) {
|
||||
Util.log('* Routing' + '-> ' + name);
|
||||
|
||||
p.name = DIR_HTML + name + '.html';
|
||||
ponse.sendFile(p);
|
||||
} else if (isFS) {
|
||||
name = Util.rmStrOnce(name, CloudFunc.FS) || main.SLASH;
|
||||
path = mellow.convertPath(name);
|
||||
|
||||
mellow.read(path, function(error, dir) {
|
||||
if (dir)
|
||||
dir.path = format.addSlashToEnd(name);
|
||||
|
||||
if (error)
|
||||
if (error.code !== 'ENOTDIR')
|
||||
ponse.sendError(error, p);
|
||||
else
|
||||
fs.realpath(path, function(error, pathReal) {
|
||||
if (!error)
|
||||
p.name = pathReal;
|
||||
else
|
||||
p.name = path;
|
||||
|
||||
p.gzip = false;
|
||||
ponse.sendFile(p);
|
||||
});
|
||||
else
|
||||
buildIndex(dir, function(error, data) {
|
||||
var NOT_LOG = true;
|
||||
|
||||
p.name = PATH_INDEX;
|
||||
|
||||
if (error)
|
||||
ponse.sendError(error, p);
|
||||
else
|
||||
ponse.send(data, p, NOT_LOG);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function buildIndex(json, callback) {
|
||||
var isMinify = Config.minify;
|
||||
|
||||
Util.exec.if(!isMinify, function(error, name) {
|
||||
fs.readFile(name || PATH_INDEX, 'utf8', function(error, template) {
|
||||
var panel, data;
|
||||
|
||||
if (!error) {
|
||||
panel = CloudFunc.buildFromJSON({
|
||||
data : json,
|
||||
template : Template
|
||||
}),
|
||||
|
||||
data = indexProcessing({
|
||||
panel : panel,
|
||||
data : template,
|
||||
});
|
||||
}
|
||||
|
||||
Util.exec(callback, error, data);
|
||||
});
|
||||
}, function(callback) {
|
||||
minify(PATH_INDEX, {
|
||||
log : true,
|
||||
returnName : true
|
||||
}, callback);
|
||||
});
|
||||
}
|
||||
})();
|
||||
Loading…
Add table
Add a link
Reference in a new issue