vesh
Version:
码农nodejs版本VESH框架,使用函数责任链模式 实现了 默认文件跳转,自定义错误页,空文件处理,URL解析,Querystring与Form参数解析,PostFiles解析,MVC自动映射,SQL自动服务化,可继承页面,静态文件,json,tjson,jsonp,tjsonp,string,void,xjson,xjosnp等等6种JSON格式,http与https等等操作
1,420 lines (1,151 loc) • 79.6 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.MSocketControler = exports.SinglePControler = exports.SingleControler = exports.JsonPageControler = exports.FormatPageAContentPage = exports.FormatPageAPage = exports.FormatPageAScriptPage = exports.FormatPageControler = exports.StringControler = exports.XControler = exports.VoidControler = exports.XJsonPControler = exports.XJsonControler = exports.TJsonPControler = exports.JsonPControler = exports.XExcelControler = exports.TJsonControler = exports.JsonControler = exports.StaticControler = exports.ViewModuler = exports.AViewControler = undefined;
var _get2 = require("babel-runtime/helpers/get");
var _get3 = _interopRequireDefault(_get2);
var _promise = require("babel-runtime/core-js/promise");
var _promise2 = _interopRequireDefault(_promise);
var _typeof2 = require("babel-runtime/helpers/typeof");
var _typeof3 = _interopRequireDefault(_typeof2);
var _regenerator = require("babel-runtime/regenerator");
var _regenerator2 = _interopRequireDefault(_regenerator);
var _asyncToGenerator2 = require("babel-runtime/helpers/asyncToGenerator");
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
var _getPrototypeOf = require("babel-runtime/core-js/object/get-prototype-of");
var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
var _possibleConstructorReturn2 = require("babel-runtime/helpers/possibleConstructorReturn");
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
var _inherits2 = require("babel-runtime/helpers/inherits");
var _inherits3 = _interopRequireDefault(_inherits2);
var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck");
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require("babel-runtime/helpers/createClass");
var _createClass3 = _interopRequireDefault(_createClass2);
var _tool = require("gcl/com/coooders/common/tool");
var _tool2 = _interopRequireDefault(_tool);
var _ni = require("gcl/com/coooders/db/ni");
var _ni2 = _interopRequireDefault(_ni);
var _app = require("./app");
var _querystring = require("querystring");
var _querystring2 = _interopRequireDefault(_querystring);
var _httpErrors = require("http-errors");
var _httpErrors2 = _interopRequireDefault(_httpErrors);
var _arraystream = require("gcl/com/coooders/collection/arraystream");
var _iconvLite = require("iconv-lite");
var _iconvLite2 = _interopRequireDefault(_iconvLite);
var _url = require("url");
var _url2 = _interopRequireDefault(_url);
var _zlib = require("zlib");
var _zlib2 = _interopRequireDefault(_zlib);
var _cookie = require("gcl/com/coooders/net/cookie");
var _cookie2 = _interopRequireDefault(_cookie);
var _mime = require("gcl/com/coooders/net/mime");
var _tool3 = require("gcl/com/coooders/io/tool");
var _tool4 = _interopRequireDefault(_tool3);
var _fs = require("fs");
var _fs2 = _interopRequireDefault(_fs);
var _path = require("path");
var _path2 = _interopRequireDefault(_path);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* ViewModuler调用的Controler基类,用于处理View文件解析 需要实现output(req,rep,session)方法
*/
var AViewControler = exports.AViewControler = function () {
function AViewControler() {
(0, _classCallCheck3.default)(this, AViewControler);
}
(0, _createClass3.default)(AViewControler, [{
key: "output",
value: function output(req, rep, session) {
return false;
}
}]);
return AViewControler;
}();
/**
* ViewModuler(basename,controler):主要用于根据session数据调用不同的Controller处理数据
*/
var ViewModuler = exports.ViewModuler = function (_AModuler) {
(0, _inherits3.default)(ViewModuler, _AModuler);
function ViewModuler(src, controler) {
(0, _classCallCheck3.default)(this, ViewModuler);
var _this = (0, _possibleConstructorReturn3.default)(this, (ViewModuler.__proto__ || (0, _getPrototypeOf2.default)(ViewModuler)).call(this, "ViewModuler"));
var _pri = pri(_this, {
src: src ? src.trim(_tool2.default.environment.splitChar) : "",
controler: controler,
controlers: {},
basedir: _path2.default.parse(_path2.default.resolve(_path2.default.normalize(process.mainModule.filename))).dir,
inputControlers: {},
hasInput: false,
regex: /\.[^/\\\.]+$/g,
pathregex: /([/\\][^/\\]+)+[/\\]/g
}),
_ = _pri._,
__ = _pri.__;
return _this;
}
(0, _createClass3.default)(ViewModuler, [{
key: "setControler",
value: function setControler(name, controler) {
var _pri2 = pri(this),
__ = _pri2.__;
__.controlers[name.toLowerCase()] = controler;
if (typeof controler.input == "function") {
__.hasInput = true;
__.inputControlers[name.toLowerCase()] = controler;
}
}
/**
* 核心思想 session 提前返回,其它的内容 继续执行但是插入redis
* @param {*} req
* @param {*} rep
* @param {*} session
*/
}, {
key: "onrequest",
value: function () {
var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(req, rep, session) {
var _pri3, __, controler;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.prev = 0;
_pri3 = pri(this), __ = _pri3.__;
//需要兼容 无后缀名和多点的情况
session.extend = session.url.pathname.match(__.regex);
session.extend = session.extend && session.extend[0].substr(1);
if (__.hasInput) {
_context.next = 6;
break;
}
return _context.abrupt("return", false);
case 6:
controler = __.inputControlers[session.extend];
_context.t0 = controler;
if (!_context.t0) {
_context.next = 11;
break;
}
_context.next = 11;
return _tool2.default.callback2(function (call) {
return controler.input(req, rep, session, call);
});
case 11:
_context.next = 17;
break;
case 13:
_context.prev = 13;
_context.t1 = _context["catch"](0);
console.log(_context.t1.stack);
throw _context.t1;
case 17:
return _context.abrupt("return", false);
case 18:
case "end":
return _context.stop();
}
}
}, _callee, this, [[0, 13]]);
}));
function onrequest(_x, _x2, _x3) {
return _ref.apply(this, arguments);
}
return onrequest;
}()
}, {
key: "onresponse",
value: function () {
var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(req, rep, session) {
var _pri4, __, query, controler;
return _regenerator2.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
_context2.prev = 0;
_pri4 = pri(this), __ = _pri4.__;
if ("200".eq(session.Response.statusCode)) {
_context2.next = 4;
break;
}
return _context2.abrupt("return", false);
case 4:
query = (session.url.pathname.match(__.pathregex) || "/")[0];
// console.log(84, session.extend, session.filename);
// session.filename && session.filename.eq(session.status)
//需要兼容 无后缀名和多点的情况
if (!session.extend && "undefined".eq((0, _typeof3.default)(rep.getHeader("content-type")))) {
session.extend = "string";
}
controler = __.controlers[session.extend] || __.controler;
session.pathname = (__.basedir + "/" + __.src + query + session.status + "." + session.extend).toLowerCase();
_context2.next = 10;
return _tool2.default.callback2(function (call) {
return controler.output(req, rep, session, call);
});
case 10:
_context2.next = 16;
break;
case 12:
_context2.prev = 12;
_context2.t0 = _context2["catch"](0);
console.log(_context2.t0.stack);
throw _context2.t0;
case 16:
return _context2.abrupt("return", false);
case 17:
case "end":
return _context2.stop();
}
}
}, _callee2, this, [[0, 12]]);
}));
function onresponse(_x4, _x5, _x6) {
return _ref2.apply(this, arguments);
}
return onresponse;
}()
}, {
key: "onresponse1",
value: function onresponse1(req, rep, session) {
delete session.extend;
delete session.basedir;
delete session.formatPath;
delete session.pathname;
return false;
}
}]);
return ViewModuler;
}(_app.AModuler);
/**
* StaticControler:静态文件控制器,允许用户下载具体文件,但是文件类型受限制于;号隔开的文件类型
*/
var StaticControler = exports.StaticControler = function (_AViewControler) {
(0, _inherits3.default)(StaticControler, _AViewControler);
function StaticControler() {
var list = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "htm;css;js;jpg;jpeg;png;gif;xml;ico;swf;eot;svg;ttf;woff";
var regex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "(^\\S+\\/action\\.js$)|(^\\/logic\\/\\S+$)";
(0, _classCallCheck3.default)(this, StaticControler);
var _this2 = (0, _possibleConstructorReturn3.default)(this, (StaticControler.__proto__ || (0, _getPrototypeOf2.default)(StaticControler)).call(this));
var _pri5 = pri(_this2, {
list: {},
regex: new RegExp(regex)
}),
__ = _pri5.__;
list.split(";").filter(function (v) {
return _tool2.default.isValid(v);
}).forEach(function (k) {
return __.list[k.toLowerCase()] = true;
});
return _this2;
}
(0, _createClass3.default)(StaticControler, [{
key: "output",
value: function () {
var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(req, rep, session) {
var _pri6, __, ist, stat, contenttype;
return _regenerator2.default.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
_pri6 = pri(this), __ = _pri6.__;
_context3.next = 3;
return _tool2.default.callback(function (call) {
return _fs2.default.exists(session.pathname, function (ist) {
return call(null, ist);
});
});
case 3:
ist = _context3.sent;
if (!(ist && __.list[session.extend.toLowerCase()] && !(session.url.pathname || "").toLowerCase().match(__.regex))) {
_context3.next = 24;
break;
}
_context3.prev = 5;
_context3.next = 8;
return _tool2.default.callback(_fs2.default.stat, _fs2.default, session.pathname);
case 8:
stat = _context3.sent;
contenttype = (0, _mime.get)(session.extend);
rep.setHeader("Content-Type", contenttype + ("text/html,application/javascript,application/json,text/css,text/plain,application/xml,text/xml".indexOf(contenttype) >= 0 ? ";charset=utf-8" : ""));
rep.setHeader("Date", stat.ctime.toUTCString());
rep.setHeader("Last-Modified", stat.mtime.toDateString());
session.isStatic = true;
session.writeStream(_fs2.default.createReadStream(session.pathname));
_context3.next = 22;
break;
case 17:
_context3.prev = 17;
_context3.t0 = _context3["catch"](5);
console.log(_context3.t0.stack);
session.write("[False]");
session.Log.error("VESH:" + _context3.t0.stack);
case 22:
_context3.next = 25;
break;
case 24:
session.end(404, "no1 such file:" + session.url.pathname);
case 25:
return _context3.abrupt("return", true);
case 26:
case "end":
return _context3.stop();
}
}
}, _callee3, this, [[5, 17]]);
}));
function output(_x9, _x10, _x11) {
return _ref3.apply(this, arguments);
}
return output;
}()
}]);
return StaticControler;
}(AViewControler);
/**
* 使用querystring和raw-body完成SessionDataManager.QueryString,Form的管理和设置
*/
var JsonControler = exports.JsonControler = function (_AViewControler2) {
(0, _inherits3.default)(JsonControler, _AViewControler2);
function JsonControler() {
var isOri = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
(0, _classCallCheck3.default)(this, JsonControler);
var _this3 = (0, _possibleConstructorReturn3.default)(this, (JsonControler.__proto__ || (0, _getPrototypeOf2.default)(JsonControler)).call(this));
pri(_this3, { isOri: isOri });
return _this3;
}
(0, _createClass3.default)(JsonControler, [{
key: "stringfy",
value: function stringfy(array) {
if (pri(this).__.isOri) return _tool2.default.toJsonString(array);
if (_tool2.default.isArray(array)) {
if (array.length == 0) return "[]";
var sb = _tool2.default.sb();
sb.append("[");
for (var i = 0; i < array.length; i++) {
sb.append(this.stringfy(array[i]));
if (i != array.length - 1) sb.append(",");
}
sb.append("]");
return sb.clear();
} else {
for (var k in array) {
array[k] = typeof array[k] == "number" || array[k] ? "" + array[k] : array[k] || "";
}return _tool2.default.toJsonString(array);
}
}
}, {
key: "output",
value: function output(req, rep, session) {
//处理JSON数组的stringfy
rep.setHeader("Content-Type", _mime.MIME.js + ";charset=utf-8");
rep.setHeader("Expires", new Date().toUTCString());
try {
if (session.dbresult.length > 0 && session.dbresult[0].length > 0) {
session.dbresult[0].forEach(function (v, i) {
session.dbresult[0][i] = v && v.length && (v[0].length == 0 || v[0]._nodata) ? [] : v;
});
//(session.dbresult[0][0][0].length == 0 || session.dbresult[0][0][0]._nodata)) session.dbresult[0][0] = [];
}
session.write(session.dbresult.length > 0 ? this.stringfy(session.dbresult[0]) : "[]");
} catch (e) {
console.log(e.stack);
session.write("[False]");
session.Log.error("VESH:" + e.stack);
}
return true;
}
}]);
return JsonControler;
}(AViewControler);
/**
* TJsonControler:TJson格式控制器 将session.dbresult中的第一个数据
*/
var TJsonControler = exports.TJsonControler = function (_JsonControler) {
(0, _inherits3.default)(TJsonControler, _JsonControler);
function TJsonControler() {
(0, _classCallCheck3.default)(this, TJsonControler);
var _this4 = (0, _possibleConstructorReturn3.default)(this, (TJsonControler.__proto__ || (0, _getPrototypeOf2.default)(TJsonControler)).call(this));
var _pri7 = pri(_this4, {
stringfy: function stringfy(array) {
if (_tool2.default.isArray(array)) {
if (array.length == 0) return "";
var sb = _tool2.default.sb();
sb.append("[");
for (var i = 0; i < array.length; i++) {
sb.append(__.stringfy(array[i]));
if (i != array.length - 1) sb.append(",");
}
sb.append("]");
return sb.clear();
} else return array == null ? "" : array;
}
}),
__ = _pri7.__;
return _this4;
}
(0, _createClass3.default)(TJsonControler, [{
key: "stringfy",
value: function stringfy(array) {
var _pri8 = pri(this),
__ = _pri8.__;
array = _tool2.default.toTJson(array);
return "[" + __.stringfy(array) + "]";
}
}]);
return TJsonControler;
}(JsonControler);
var XExcelControler = exports.XExcelControler = function (_AViewControler3) {
(0, _inherits3.default)(XExcelControler, _AViewControler3);
function XExcelControler() {
var paramsname = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "_name";
(0, _classCallCheck3.default)(this, XExcelControler);
var _this5 = (0, _possibleConstructorReturn3.default)(this, (XExcelControler.__proto__ || (0, _getPrototypeOf2.default)(XExcelControler)).call(this));
pri(_this5, { paramsname: paramsname });
return _this5;
}
(0, _createClass3.default)(XExcelControler, [{
key: "output",
value: function () {
var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(req, rep, session) {
var _pri9, _, __, array;
return _regenerator2.default.wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
//处理JSON数组的stringfy
_pri9 = pri(this), _ = _pri9._, __ = _pri9.__;
_context4.prev = 1;
array = session.dbresult && session.dbresult.length > 0 ? _tool2.default.toTJson(session.dbresult[0])[0] : [];
// console.log(226,"("+V.toJsonString(array).replace(/(\\")/g,'')+")");
!!array.length && (array = eval("(" + _tool2.default.toJsonString(array).replace(/(\\")/g, "") + ")"));
//去除"号
_context4.next = 6;
return session.exportExcel(array, session.param(__.paramsname) || session.status + ".xlsx");
case 6:
_context4.next = 13;
break;
case 8:
_context4.prev = 8;
_context4.t0 = _context4["catch"](1);
console.log(_context4.t0.stack);
session.write("[False]");
session.Log.error("VESH:" + _context4.t0.stack);
case 13:
return _context4.abrupt("return", true);
case 14:
case "end":
return _context4.stop();
}
}
}, _callee4, this, [[1, 8]]);
}));
function output(_x14, _x15, _x16) {
return _ref4.apply(this, arguments);
}
return output;
}()
}]);
return XExcelControler;
}(AViewControler);
/**
* JsonPControler(bk:"_bk"):JsonP格式控制器允许
*/
var JsonPControler = exports.JsonPControler = function (_JsonControler2) {
(0, _inherits3.default)(JsonPControler, _JsonControler2);
function JsonPControler() {
var bk = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "_bk";
(0, _classCallCheck3.default)(this, JsonPControler);
var _this6 = (0, _possibleConstructorReturn3.default)(this, (JsonPControler.__proto__ || (0, _getPrototypeOf2.default)(JsonPControler)).call(this));
pri(_this6, { bk: bk });
return _this6;
}
(0, _createClass3.default)(JsonPControler, [{
key: "output",
value: function output(req, rep, session) {
var _pri10 = pri(this),
__ = _pri10.__;
//处理JSON数组的stringfy
var bk = session.param(__.bk);
if (bk) {
rep.setHeader("Content-Type", _mime.MIME.js + ";charset=utf-8");
rep.setHeader("Expires", new Date().toUTCString());
try {
var json = session.dbresult.length > 0 ? this.stringfy(session.dbresult[0]) : "[]";
session.write(bk + "(" + json + ");");
} catch (e) {
console.log(e.stack);
session.write(bk + "([False]);");
session.Log.error("VESH:" + e.stack);
}
} else session.end(500, "JsonP need " + __.bk + " as callback-function name.");
return true;
}
}]);
return JsonPControler;
}(JsonControler);
/**
* TJsonPControler:TJsonP格式控制器 将session.dbresult中的第一个数据
*/
var TJsonPControler = exports.TJsonPControler = function (_TJsonControler) {
(0, _inherits3.default)(TJsonPControler, _TJsonControler);
function TJsonPControler() {
var bk = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "_bk";
(0, _classCallCheck3.default)(this, TJsonPControler);
var _this7 = (0, _possibleConstructorReturn3.default)(this, (TJsonPControler.__proto__ || (0, _getPrototypeOf2.default)(TJsonPControler)).call(this));
pri(_this7, { bk: bk });
return _this7;
}
(0, _createClass3.default)(TJsonPControler, [{
key: "output",
value: function output(req, rep, session) {
var _pri11 = pri(this),
__ = _pri11.__;
//处理JSON数组的stringfy
var bk = session.param(__.bk);
if (bk) {
rep.setHeader("Content-Type", _mime.MIME.js + ";charset=utf-8");
rep.setHeader("Expires", new Date().toUTCString());
try {
var json = session.dbresult.length > 0 ? this.stringfy(session.dbresult[0]) : "[]";
session.write(bk + "(" + json + ");");
} catch (e) {
console.log(e.stack);
session.write(bk + "([False]);");
session.Log.error("VESH:" + e.stack);
}
} else session.end(500, "TJsonP need " + __.bk + " as callback-function name.");
return true;
}
}]);
return TJsonPControler;
}(TJsonControler);
/**
* XJsonControler:XJson格式控制器 将session.dbresult中的第一个数据
*/
var XJsonControler = exports.XJsonControler = function (_JsonControler3) {
(0, _inherits3.default)(XJsonControler, _JsonControler3);
function XJsonControler() {
(0, _classCallCheck3.default)(this, XJsonControler);
var _this8 = (0, _possibleConstructorReturn3.default)(this, (XJsonControler.__proto__ || (0, _getPrototypeOf2.default)(XJsonControler)).call(this));
var _pri12 = pri(_this8),
__ = _pri12.__;
return _this8;
}
(0, _createClass3.default)(XJsonControler, [{
key: "output",
value: function output(req, rep, session) {
//处理JSON数组的stringfy
rep.setHeader("Content-Type", _mime.MIME.js + ";charset=utf-8");
rep.setHeader("Expires", new Date().toUTCString());
try {
if (session.dbresult) {
var data = session.dbresult;
while (data.length) {
data = data[0];
}session.write(_tool2.default.toJsonString({
success: true,
Msg: "",
data: data,
code: 0
}));
} else session.write(_tool2.default.toJsonString({
success: true,
Msg: "",
data: {},
code: 0
}));
} catch (e) {
console.log(e.stack);
session.write(_tool2.default.toJsonString({
success: false,
Msg: e.message,
data: "",
code: e.code || 500
}));
session.Log.error("VESH:" + e.stack);
}
return true;
}
}]);
return XJsonControler;
}(JsonControler);
/**
* XJsonPControler:XJson格式控制器 将session.dbresult中的第一个数据
*/
var XJsonPControler = exports.XJsonPControler = function (_XJsonControler) {
(0, _inherits3.default)(XJsonPControler, _XJsonControler);
function XJsonPControler() {
var bk = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "_bk";
(0, _classCallCheck3.default)(this, XJsonPControler);
var _this9 = (0, _possibleConstructorReturn3.default)(this, (XJsonPControler.__proto__ || (0, _getPrototypeOf2.default)(XJsonPControler)).call(this));
pri(_this9, { bk: bk });
return _this9;
}
(0, _createClass3.default)(XJsonPControler, [{
key: "output",
value: function output(req, rep, session) {
var _pri13 = pri(this),
__ = _pri13.__;
//处理JSON数组的stringfy
var bk = session.param(__.bk);
if (bk) {
rep.setHeader("Content-Type", _mime.MIME.js + ";charset=utf-8");
rep.setHeader("Expires", new Date().toUTCString());
try {
var json = _tool2.default.toJsonString({
success: true,
Msg: "",
data: {},
code: 0
});
if (session.dbresult) {
var data = session.dbresult;
while (data.length) {
data = data[0];
}json = _tool2.default.toJsonString({
success: true,
Msg: "",
data: data,
code: 0
});
}
session.write(bk + "(" + json + ");");
} catch (e) {
console.log(e.stack);
session.write(bk + "(" + _tool2.default.toJsonString({
success: false,
Msg: e.message,
data: "",
code: e.code || 500
}) + ");");
session.Log.error("VESH:" + e.stack);
}
} else session.end(500, "TJsonP need " + __.bk + " as callback-function name.");
return true;
}
}]);
return XJsonPControler;
}(XJsonControler);
/**
* VoidControler:无值返回值
*/
var VoidControler = exports.VoidControler = function (_AViewControler4) {
(0, _inherits3.default)(VoidControler, _AViewControler4);
function VoidControler() {
(0, _classCallCheck3.default)(this, VoidControler);
var _this10 = (0, _possibleConstructorReturn3.default)(this, (VoidControler.__proto__ || (0, _getPrototypeOf2.default)(VoidControler)).call(this));
pri(_this10);
return _this10;
}
(0, _createClass3.default)(VoidControler, [{
key: "output",
value: function output(req, rep, session) {
//处理JSON数组的stringfy
rep.setHeader("Content-Type", _mime.MIME.js + ";charset=utf-8");
rep.setHeader("Expires", new Date().toUTCString());
session.write("[[1]]");
return true;
}
}]);
return VoidControler;
}(AViewControler);
/**
* XControler:完全由Action处理的返回值
*/
var XControler = exports.XControler = function (_AViewControler5) {
(0, _inherits3.default)(XControler, _AViewControler5);
function XControler() {
(0, _classCallCheck3.default)(this, XControler);
var _this11 = (0, _possibleConstructorReturn3.default)(this, (XControler.__proto__ || (0, _getPrototypeOf2.default)(XControler)).call(this));
pri(_this11);
return _this11;
}
(0, _createClass3.default)(XControler, [{
key: "output",
value: function output() {
return true;
}
}]);
return XControler;
}(AViewControler);
/**
* StringControler:status作为返回值返回值
*/
var StringControler = exports.StringControler = function (_AViewControler6) {
(0, _inherits3.default)(StringControler, _AViewControler6);
function StringControler() {
(0, _classCallCheck3.default)(this, StringControler);
var _this12 = (0, _possibleConstructorReturn3.default)(this, (StringControler.__proto__ || (0, _getPrototypeOf2.default)(StringControler)).call(this));
pri(_this12);
return _this12;
}
(0, _createClass3.default)(StringControler, [{
key: "output",
value: function output(req, rep, session) {
//处理JSON数组的stringfy
rep.setHeader("Content-Type", _mime.MIME.js + ";charset=utf-8");
rep.setHeader("Expires", new Date().toUTCString());
session.write(session.returnValue || session.status);
return true;
}
}]);
return StringControler;
}(AViewControler);
/**
* FormatPageControler:格式化页面
*/
var FormatPageControler = exports.FormatPageControler = function (_AViewControler7) {
(0, _inherits3.default)(FormatPageControler, _AViewControler7);
function FormatPageControler() {
var extend = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "html";
(0, _classCallCheck3.default)(this, FormatPageControler);
var _this13 = (0, _possibleConstructorReturn3.default)(this, (FormatPageControler.__proto__ || (0, _getPrototypeOf2.default)(FormatPageControler)).call(this));
pri(_this13, { extend: extend });
return _this13;
}
(0, _createClass3.default)(FormatPageControler, [{
key: "output",
value: function () {
var _ref5 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee8(req, rep, session) {
var _this14 = this;
var _pri14, _, __;
return _regenerator2.default.wrap(function _callee8$(_context8) {
while (1) {
switch (_context8.prev = _context8.next) {
case 0:
_pri14 = pri(this), _ = _pri14._, __ = _pri14.__;
_context8.next = 3;
return _tool2.default.next(function () {
var _ref6 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee5(data) {
var pathname, ist, text;
return _regenerator2.default.wrap(function _callee5$(_context5) {
while (1) {
switch (_context5.prev = _context5.next) {
case 0:
pathname = session.pathname.substr(0, session.pathname.length - session.extend.length) + __.extend;
_context5.next = 3;
return _tool2.default.callback(function (call) {
return _fs2.default.exists(pathname, function (ist) {
return call(null, ist);
});
});
case 3:
ist = _context5.sent;
if (!ist) {
_context5.next = 12;
break;
}
_context5.next = 7;
return _tool2.default.callback(_fs2.default.readFile, _fs2.default, pathname);
case 7:
text = _context5.sent;
data.text = Buffer.from(text).toString("utf-8") + "";
return _context5.abrupt("return", false);
case 12:
session.end(404, "no such file:" + session.url.pathname);
return _context5.abrupt("return", true);
case 14:
case "end":
return _context5.stop();
}
}
}, _callee5, _this14);
}));
return function (_x24) {
return _ref6.apply(this, arguments);
};
}(), function () {
var _ref7 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee6(data) {
return _regenerator2.default.wrap(function _callee6$(_context6) {
while (1) {
switch (_context6.prev = _context6.next) {
case 0:
_context6.next = 2;
return _.format(data.text, req, rep, session);
case 2:
data.text = _context6.sent;
return _context6.abrupt("return", false);
case 4:
case "end":
return _context6.stop();
}
}
}, _callee6, _this14);
}));
return function (_x25) {
return _ref7.apply(this, arguments);
};
}(), function () {
var _ref8 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee7(data) {
var matchs, parent;
return _regenerator2.default.wrap(function _callee7$(_context7) {
while (1) {
switch (_context7.prev = _context7.next) {
case 0:
data.parent = {};
//不支持方法执行 只能实现数据<%=%>填充 循环一般不执行 继承需要实现 而且应该定义在<html inherit="具体的父类文件" >元素中 说明其继承的json文件并且直接进入 会话信息
matchs = data.text.match(/<[hH][tT][mM][lL][^>]+inherit=[^>]+>/);
if (!matchs) {
_context7.next = 18;
break;
}
parent = matchs[0].match(/inherit=[\"'][^\"']+[\"']/)[0].split(/['"]/)[1];
_context7.prev = 4;
_context7.next = 7;
return _tool2.default.include(parent).output(req, rep, session);
case 7:
data.parent = _context7.sent;
data.text = data.text.replace(/<\/[hH][eE][aA][dD]>/, function (word) {
return (data.parent["HeaderScript"] || "") + word;
}).replace(/<[bB][oO][dD][yY][^>]*>/, function (word) {
return word + (data.parent["Header"] || "") + (data.parent["Menu"] || "");
}).replace(/<\/[bB][oO][dD][yY]>/, function (word) {
return (data.parent["Footer"] || "") + (data.parent["FooterScript"] || "") + word;
});
return _context7.abrupt("return", false);
case 12:
_context7.prev = 12;
_context7.t0 = _context7["catch"](4);
session.end(500, "VESH:" + _context7.t0.stack);
return _context7.abrupt("return", true);
case 16:
_context7.next = 19;
break;
case 18:
return _context7.abrupt("return", false);
case 19:
case "end":
return _context7.stop();
}
}
}, _callee7, _this14, [[4, 12]]);
}));
return function (_x26) {
return _ref8.apply(this, arguments);
};
}(), function (data) {
rep.setHeader("Content-Type", _mime.MIME.html + ";charset=utf-8");
//替换可能的引用页面里面的设置
session.write(data.text);
return false;
});
case 3:
return _context8.abrupt("return", true);
case 4:
case "end":
return _context8.stop();
}
}
}, _callee8, this);
}));
function output(_x21, _x22, _x23) {
return _ref5.apply(this, arguments);
}
return output;
}()
}, {
key: "funrep",
value: function () {
var _ref9 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee9(s, o) {
var reg, pros;
return _regenerator2.default.wrap(function _callee9$(_context9) {
while (1) {
switch (_context9.prev = _context9.next) {
case 0:
reg = /<%=(.+?)%>/gi;
pros = [];
s = s.replace(reg, function () {
var word = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var prop = word.replace(/<%=/g, "").replace(/%>/g, "");
var ret = o(prop);
if (ret.then && ret.catch) {
pros.push(ret);
return word;
}
return ret;
});
if (!(pros.length > 0)) {
_context9.next = 8;
break;
}
_context9.next = 6;
return _promise2.default.all(pros);
case 6:
pros = _context9.sent;
s = s.replace(reg, function () {
var word = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
return pros.shift();
});
case 8:
return _context9.abrupt("return", s);
case 9:
case "end":
return _context9.stop();
}
}
}, _callee9, this);
}));
function funrep(_x27, _x28) {
return _ref9.apply(this, arguments);
}
return funrep;
}()
}, {
key: "getvalue",
value: function getvalue(obj, name) {
var matchs = name.match(/\([^\)]+\)/g);
var params = [];
if (matchs && matchs.length > 0) {
name = name.substr(0, name.indexOf("("));
params = matchs[0].replace(/[\(\)\'\"]/g, "").split(",");
}
if (typeof obj[name] == "function") return obj[name].apply(obj, params);else if (obj.__proto__ && obj.__proto__[name]) return obj.__proto__[name].apply(obj, params);else return obj[name];
}
}, {
key: "format",
value: function () {
var _ref10 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee11(text, req, rep, session) {
var _this15 = this;
var _pri15, _, __;
return _regenerator2.default.wrap(function _callee11$(_context11) {
while (1) {
switch (_context11.prev = _context11.next) {
case 0:
_pri15 = pri(this), _ = _pri15._, __ = _pri15.__;
return _context11.abrupt("return", _.funrep(text, function () {
var _ref11 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee10(data) {
var map, obj, i, v;
return _regenerator2.default.wrap(function _callee10$(_context10) {
while (1) {
switch (_context10.prev = _context10.next) {
case 0:
map = data.split(/(?:[\.\[\]])/);
obj = null;
i = 0;
case 3:
if (!(i < map.length)) {
_context10.next = 14;
break;
}
if (!map[i]) {
_context10.next = 11;
break;
}
v = map[i];
if (i == 0) obj = _.getvalue(session, v) || session.dbresult && _.getvalue(session.dbresult, v) || session.param(v);else if (obj) obj = _.getvalue(obj, v);
if (!(obj && obj.then && obj.catch)) {
_context10.next = 11;
break;
}
_context10.next = 10;
return obj;
case 10:
obj = _context10.sent;
case 11:
i++;
_context10.next = 3;
break;
case 14:
obj = typeof (obj || "") == "string" ? obj : obj.toString ? obj.toString() : _tool2.default.toJsonString(obj);
return _context10.abrupt("return", obj || "");
case 16:
case "end":
return _context10.stop();
}
}
}, _callee10, _this15);
}));
return function (_x35) {
return _ref11.apply(this, arguments);
};
}()));
case 2:
case "end":
return _context11.stop();
}
}
}, _callee11, this);
}));
function format(_x31, _x32, _x33, _x34) {
return _ref10.apply(this, arguments);
}
return format;
}()
}]);
return FormatPageControler;
}(AViewControler);
var FormatPageAScriptPage = exports.FormatPageAScriptPage = function () {
function FormatPageAScriptPage(dirs) {
var HeaderScriptPath = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "HeaderScript.htm";
var FooterScriptPath = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "FooterScript.htm";
(0, _classCallCheck3.default)(this, FormatPageAScriptPage);
this.formater = new FormatPageControler();
this.dirs = dirs;
pri(this, {
HeaderScriptPath: _tool4.default.formatPath(this.dirs + _tool2.default.environment.splitChar + HeaderScriptPath),
FooterScriptPath: _tool4.default.formatPath(this.dirs + _tool2.default.environment.splitChar + FooterScriptPath)
});
}
(0, _createClass3.default)(FormatPageAScriptPage, [{
key: "output",
value: function () {
var _ref12 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee12(req, rep, session) {
var _pri16, _, __;
return _regenerator2.default.wrap(function _callee12$(_context12) {
while (1) {
switch (_context12.prev = _context12.next) {
case 0:
_pri16 = pri(this), _ = _pri16._, __ = _pri16.__;
_context12.t0 = _.formater;
_context12.t1 = Buffer;
_context12.next = 5;
return _tool2.default.callback(_fs2.default.readFile, _fs2.default, __.HeaderScriptPath);
case 5:
_context12.t2 = _context12.sent;
_context12.t3 = _context12.t1.from.call(_context12.t1, _context12.t2).toString("utf-8");
_context12.t4 = req;
_context12.t5 = rep;
_context12.t6 = session;
_context12.next = 12;
return _context12.t0.format.call(_context12.t0, _context12.t3, _context12.t4, _context12.t5, _context12.t6);
case 12:
_context12.t7 = _context12.sent;
_context12.t8 = _.formater;
_context12.t9 = Buffer;
_context12.next = 17;
return _tool2.default.callback(_fs2.default.readFile, _fs2.default, __.FooterScriptPath);
case 17:
_context12.t10 = _context12.sent;
_context12.t11 = _context12.t9.from.call(_context12.t9, _context12.t10).toString("utf-8");
_context12.t12 = req;
_context12.t13 = rep;
_context12.t14 = session;
_context12.next = 24;
return _context12.t8.format.call(_context12.t8, _context12.t11, _context12.t12, _context12.t13, _context12.t14);
case 24:
_context12.t15 = _context12.sent;
return _context12.abrupt("return", {
HeaderScript: _context12.t7,
FooterScript: _context12.t15
});
case 26:
case "end":
return _context12.stop();
}
}
}, _callee12, this);
}));
function output(_x38, _x39, _x40) {
return _ref12.apply(this, arguments);
}
return output;
}()
}]);
return FormatPageAScriptPage;
}();
var FormatPageAPage = exports.FormatPageAPage = function (_FormatPageAScriptPag) {
(0, _inherits3.default)(FormatPageAPage, _FormatPageAScriptPag);
function FormatPageAPage(dirs, HeaderScriptPath, FooterScriptPath) {
var HeaderPath = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "Header.htm";
var FooterPath = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : "Footer.htm";
(0, _classCallCheck3.default)(this, FormatPageAPage);
var _this16 = (0, _possibleConstructorReturn3.default)(this, (FormatPageAPage.__proto__ || (0, _getPrototypeOf2.default)(FormatPageAPage)).call(this, dirs, HeaderScriptPath, FooterScriptPath));
pri(_this16, {
HeaderPath: _tool4.default.formatPath(_this16.dirs + _tool2.default.environment.splitChar + HeaderPath),
FooterPath: _tool4.default.formatPath(_this16.dirs + _tool2.default.environment.splitChar + FooterPath)
});
return _this16;
}
(0, _createClass3.default)(FormatPageAPage, [{
key: "output",
value: function () {
var _ref13 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee13(req, rep, session) {
var _pri17, _, __;
return _regenerator2.default.wrap(function _callee13$(_context13) {
while (1) {
switch (_context13.prev = _context13.next) {
case 0:
_pri17 = pri(this), _ = _pri17._, __ = _pri17.__;
_context13.t0 = _tool2.default;
_context13.next = 4;
return (0, _get3.default)(FormatPageAPage.prototype.__proto__ || (0, _getPrototypeOf2.default)(FormatPageAPage.prototype), "output", this).call(this, req, rep, session);
case 4:
_context13.t1 = _context13.sent;
_context13.t2 = _.formater;
_context13.t3 = Buffer;
_context13.next = 9;
return _tool2.default.callback(_fs2.default.readFile, _fs2.default, __.HeaderPath);
case 9:
_context13.t4 = _context13.sent;
_context13.t5 = _context13.t3.from.call(_context13.t3, _context13.t4).toString("utf-8");
_context13.t6 = req;
_context13.t7 = rep;
_context13.t8 = session;
_context13.next = 16;
return _context13.t2.format.call(_context13.t2, _context13.t5, _context13.t6, _context13.t7, _context13.t8);
case 16:
_context13.t9 = _context13.sent;
_context13.t10 = _.formater;
_context13.t11 = Buffer;
_context13.next = 21;
return _tool2.default.callback(_fs2.default.readFile, _fs2.default, __.FooterPath);
case 21:
_context13.t12 = _context13.sent;
_context13.t13 = _context13.t11.from.call(_context13.t11, _context13.t12).toString("utf-8");
_context13.t14 = req;
_context13.t15 = rep;
_context13.t16 = session;
_context13.next = 28;
return _context13.t10.format.call(_context13.t10, _context13.t13, _context13.t14, _context13.t15, _context13.t16);
case 28:
_context13.t17 = _context13.sent;
_context13.t18 = {
Header: _context13.t9,
Footer: _context13.t17
};
return _context13.abrupt("return", _context13.t0.merge.call(_context13.t0, _context13.t1, _context13.t18));
case 31:
case "end":
return _context13.stop();
}
}
}, _callee13, this);
}));
function output(_x43, _x44, _x45) {
return _ref13.apply(this, arguments);
}
return output;
}()
}]);
return FormatPageAPage;
}(FormatPageAScriptPage);
var FormatPageAContentPage = exports.FormatPageAContentPage = function (_FormatPageAPage) {
(0, _inherits3.default)(FormatPageAContentPage, _FormatPageAPage);
function FormatPageAContentPage(dirs, HeaderScriptPath, FooterScriptPath, HeaderPath, FooterPath) {
var MenuPath = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : "Menu.htm";
(0, _classCallCheck3.default)(this, FormatPageAContentPage);
var _this17 = (0, _possibleConstructorReturn3.default)(this, (FormatPageAContentPage.__proto__ || (0, _getPrototypeOf2.default)(FormatPageAContentPage)).call(this, dirs, HeaderScriptPath, FooterScriptPath, HeaderPath, FooterPath));
pri(_this17, {
MenuPath: _tool4.default.formatPath(_this17.dirs + _tool2.default.environment.splitChar + MenuPath)
});
return _this17;
}
(0, _createClass3.default)(FormatPageAContentPage, [{
key: "output",
value: function () {
var _ref14 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee14(req, rep, session) {
var _pri18, _, __;
return _regenerator2.default.wrap(function _callee14$(_context14) {
while (1) {
switch (_context14.prev = _context14.next) {
case 0:
_pri18 = pri(this), _ = _pri18._, __ = _pri18.__;
_context14.t0 = _tool2.default;
_context14.next = 4;
return (0, _get3.default)(FormatPageAContentPage.prototype.__proto__ || (0, _getPrototypeOf2.default)(FormatPageAContentPage.prototype), "output", this).call(this, req, rep, session);
case 4:
_context14.t1 = _context14.sent;
_context14.t2 = _.formater;