From 26bc8622d25bdc234858004fc6f28b4beec8ccfc Mon Sep 17 00:00:00 2001 From: yutent Date: Tue, 24 Oct 2023 15:24:55 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/index.js | 2 +- index.js | 100 ++++++++++++++++++++++++++----------------- middleware/router.js | 4 +- package.json | 2 +- 4 files changed, 65 insertions(+), 43 deletions(-) diff --git a/config/index.js b/config/index.js index f6462f3..232b90d 100644 --- a/config/index.js +++ b/config/index.js @@ -51,8 +51,8 @@ export default { origin: [], // ['abc.com', 'a.foo.com'] maxAge: 14400 }, + // 常用正则 regexp: { - // 常用正则 email: /^[\w\.\-]+@\w+([\.\-]\w+)*\.\w+$/, uname: /^[A-Za-z\d_]{4,16}$/, passwd: /^\S{6,20}$/, diff --git a/index.js b/index.js index c339d14..3b52c6f 100644 --- a/index.js +++ b/index.js @@ -32,14 +32,12 @@ process.on('uncaughtException', err => { }) export default class Five { - constructor() { - hideProperty(this, '__FIVE__', config) - hideProperty(this, '__MODULES__', {}) - hideProperty(this, '__MIDDLEWARE__', [Cors]) - } + #config = config + #modules = {} + #middlewares = [Cors] - __main__() { - var { domain, website, session, jwt } = this.__FIVE__ + #start() { + var { domain, website, session, jwt } = this.#config domain = domain || website session.domain = session.domain || domain @@ -53,12 +51,12 @@ export default class Five { // 以便用户自定义的中间件可以直接操作session if (session.enabled) { this.install(sessionPackage) - this.__MIDDLEWARE__.unshift(sessionConnect) + this.#middlewares.unshift(sessionConnect) } // 开启jwt if (jwt) { this.install(jwtPackage) - this.__MIDDLEWARE__.unshift(jwtConnect) + this.#middlewares.unshift(jwtConnect) } // 路由中间件要在最后 @@ -71,17 +69,17 @@ export default class Five { set(obj) { for (let i in obj) { if (typeof obj[i] === 'object' && !Array.isArray(obj[i])) { - if (!this.__FIVE__[i]) { - this.__FIVE__[i] = obj[i] + if (!this.#config[i]) { + this.#config[i] = obj[i] } else { try { - Object.assign(this.__FIVE__[i], obj[i]) + Object.assign(this.#config[i], obj[i]) } catch (err) { console.error(err) } } } else { - this.__FIVE__[i] = obj[i] + this.#config[i] = obj[i] } } return this @@ -89,7 +87,7 @@ export default class Five { // 获取全局配置 get(key) { - return this.__FIVE__[key] + return this.#config[key] } // 加载中间件 @@ -98,7 +96,7 @@ export default class Five { // 而是框架内部封装过的,可通过origin属性访问原生的对象 use(fn) { if (typeof fn === 'function') { - this.__MIDDLEWARE__.push(fn) + this.#middlewares.push(fn) return this } throw TypeError('argument must be a function') @@ -127,7 +125,7 @@ export default class Five { item = path.join(item, './index.js') } - this.__MODULES__[name] = import(item).catch(err => { + this.#modules[name] = import(item).catch(err => { console.error(err) return { default: null } }) @@ -137,40 +135,64 @@ export default class Five { return this } + $load(name) { + return this.#modules[name] + } + // 启动http服务 listen(port) { + this.set({ port }) + return this + } + + run() { var _this = this var server - this.__main__() + this.#start() - server = http.createServer(function (req, res) { - var request = new Request(req, res) - var response = new Response(req, res) + server = http.createServer() - var middleware = _this.__MIDDLEWARE__.concat() - var fn = middleware.shift() + server + .on('request', function (req, res) { + var request = new Request(req, res) + var response = new Response(req, res) - if (response.rendered) { - return - } + var middleware = _this.#middlewares.concat() + var fn = middleware.shift() - response.set('X-Powered-By', _this.get('X-Powered-By') || 'Five.js') + if (response.rendered) { + return + } - if (fn) { - ;(async function next() { - await fn.call(_this, request, response, function () { - fn = middleware.shift() - if (fn) { - next() - } - }) - })() - } - }) + response.set('X-Powered-By', _this.get('X-Powered-By') || 'Five.js') - server.listen(port || this.get('port')) + if (fn) { + ;(async function next() { + await fn.call(_this, request, response, function () { + fn = middleware.shift() + if (fn) { + next() + } + }) + })() + } + }) + .on('listening', _ => { + console.log('启动成功, 可通过以下地址访问') + console.log(' 本地: %s://%s:%d', 'http', '127.0.0.1', this.get('port')) + }) + .on('error', err => { + console.error(err) + }) - return server + server.listen(this.get('port')) + + this.server = server + return this } } + +export function createApp() { + return new Five() +} diff --git a/middleware/router.js b/middleware/router.js index 2026210..4c83715 100644 --- a/middleware/router.js +++ b/middleware/router.js @@ -9,7 +9,7 @@ export default function (req, res, next) { var spa = this.get('spa') // 1. 先判断控制器是否存在 - if (!this.__MODULES__[spa ? 'index' : req.app]) { + if (!this.$load(spa ? 'index' : req.app)) { return res.error(`Controller [${req.app}] not found`, 404) } @@ -19,7 +19,7 @@ export default function (req, res, next) { } // 3. 实例化控制器 - this.__MODULES__[spa ? 'index' : req.app] + this.$load(spa ? 'index' : req.app) .then(async ({ default: Mod }) => { let app, route, act let err = '' diff --git a/package.json b/package.json index e84163d..a9d4738 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@gm5/core", - "version": "1.1.5", + "version": "2.0.0", "type": "module", "description": "Five.js, 一个轻量级的nodejs mvc框架 旨在简单易用, 5分钟即可上手", "author": "yutent ",