chanjs 1.0.30 → 1.0.33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,98 +1,99 @@
1
- # 中文 | [English](./README.en.md)
2
1
 
3
- # <center>Chan.js mvc框架</center>
2
+ # Chan.js
4
3
 
5
- Chan.js 基于express 纯js研发的轻量级mvc框架。基于函数式编程思想,性能优越,代码清晰,流程易读,可持续维护高。
4
+ Chan.js is a lightweight MVC framework developed in pure JavaScript based on Express. It embodies functional programming concepts, offering superior performance, clear code, and easy-to-follow processes that ensure high maintainability.
6
5
 
7
- ## 特性
6
+ ## features
8
7
 
9
- - 基于express
10
- - 支持es6语法
11
- - 模块化
12
- - 支持多模块路由
13
- - 支持多模块视图
14
- - 支持多模块控制器
15
- - 支持多模块服务
16
- - 插件化
17
- - 轻量级(核心代码300行内)
18
- - 长期维护
8
+ - Built on top of Express
9
+ - Supports ES6 syntax
10
+ - Modular Design
11
+ - Supports multiple module routes
12
+ - Supports multiple module views
13
+ - Supports multiple module controllers
14
+ - Supports multiple module services
15
+ - Plugin-based architecture
16
+ - Lightweight (core code within 300 lines)
17
+ - Long-term maintenance
19
18
 
20
- ## 规范 遵循约定优于配置
19
+ ## Conventions Over Configuration
21
20
 
22
21
  ```code
23
22
  |- app
24
- |- config 配置
25
- |- module 模块1
26
- |- module1 模块1
27
- |- controller 控制器
28
- |- service 服务模型
29
- |- view 视图模板
30
- |- router.js 路由
31
- |- module2 模块2
32
- |- controller 控制器
33
- |- service 服务模型
34
- |- view 视图模板
35
- |- router.js路由
36
- |- extend 扩展
37
- |- middleware 中间件
38
- |- plugin 插件
39
- |- plus-module1 插件1
40
- |- controller 控制器
41
- |- service 服务模型
42
- |- view 视图模板
43
- |- router.js 路由
44
- |- module2 插件2
45
- |- controller 控制器
46
- |- service 服务模型
47
- |- view 视图模板
48
- |- router.js路由
49
- |- public 静态文件
23
+ |- config
24
+ |- module
25
+ |- module1
26
+ |- controller
27
+ |- service
28
+ |- view
29
+ |- router.js
30
+ |- module2
31
+ |- controller
32
+ |- service
33
+ |- view
34
+ |- router.js
35
+ |- extend
36
+ |- middleware
37
+ |- plugin
38
+ |- plus-module1
39
+ |- controller
40
+ |- service
41
+ |- view
42
+ |- router.js
43
+ |- module2
44
+ |- controller
45
+ |- service
46
+ |- view
47
+ |- router.js
48
+ |- public
50
49
  |- index.js
51
50
  ```
52
51
 
53
- ### 初始化流程
52
+ ### Initialization Process
54
53
 
55
- - 初始化
56
- - 加载配置
57
- - 加载模块
58
- - 加载service
59
- - 加载controller
60
- - 加载router
61
- - 加载extend
62
- - 加载plugin
63
- - 加载service
64
- - 加载controller
65
- - 加载router
66
- - beforeStart() 挂在从数据库获取的配置合并到配置文件中
67
- - run() 启动服务
54
+ - Initialization
55
+ - Load configuration
56
+ - Load modules
57
+ - Load services
58
+ - Load controllers
59
+ - Load routers
60
+ - Load extensions
61
+ - Load plugins
62
+ - Load services
63
+ - Load controllers
64
+ - Load routers
65
+ - beforeStart() Hook to merge configurations from the database into the configuration
66
+ - run() Start the server
68
67
 
69
- ### 官网
68
+ ### Official Website
70
69
 
71
- 基于Chanjs开发的cms系统
72
- 网址:<https://www.chancms.top>
70
+ A CMS system developed with Chan.js
71
+ Website:<https://www.chancms.top>
73
72
 
74
- ### 特点
73
+ ### Highlights
75
74
 
76
- - 配置文件
77
- - 多模块mvc
78
- - 插件mvc
79
- - 支持cors跨域配置
80
- - mysql数据库支持
81
- - 路由控制
82
- - art-template模板
83
- - 静态资源
84
- - cookie
85
- - 日志功能
75
+ - Configuration files
76
+ - Multi-module MVC structure
77
+ - Plugin MVC support
78
+ - CORS cross-origin configuration support
79
+ - MySQL database support
80
+ - Route control
81
+ - Art-template template engine
82
+ - Static resources management
83
+ - Cookie handling
84
+ - Logging capabilities
86
85
 
87
- ### 运行
86
+ ### run
88
87
 
89
88
  ```javascript
90
89
  const Chanjs = require("chanjs");
91
90
  const chan = new Chanjs();
92
- //加载中间件
91
+ // Load middleware
93
92
  chan.beforeStart(fn);
94
- //扫描模块
93
+ // Scan modules
95
94
  chan.start();
96
- //启动服务
95
+ // Start the server
97
96
  chan.run();
98
97
  ```
98
+
99
+ This framework is designed for developers who seek a balance between simplicity and functionality, providing a robust foundation for building web applications with ease.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "chanjs",
3
- "version": "1.0.30",
4
- "description": "chanjs基于express 纯js研发的轻量级mvc框架。",
3
+ "version": "1.0.33",
4
+ "description": "Chanjs is a lightweight MVC framework developed based on express MySQL and pure JavaScript.",
5
5
  "main": "core/chan.js",
6
6
  "module": "core/chan.js",
7
7
  "keywords": [
@@ -26,7 +26,8 @@
26
26
  "mysql2": "^3.11.0",
27
27
  "dayjs": "^1.11.12"
28
28
  },
29
- "__npminstall_done": true,
30
- "_from": "chanjs@1.0.22",
31
- "_resolved": "https://registry.npmmirror.com/chanjs/-/chanjs-1.0.22.tgz"
29
+ "homepage": "https://www.npmjs.com/package/chanjs",
30
+ "files": [
31
+ "README.md"
32
+ ]
32
33
  }
package/README.en.md DELETED
@@ -1,100 +0,0 @@
1
- # [中文](./README.md) | English
2
-
3
- # <center>Chan.js MVC Framework</center>
4
-
5
- Chan.js is a lightweight MVC framework developed in pure JavaScript based on Express. It embodies functional programming concepts, offering superior performance, clear code, and easy-to-follow processes that ensure high maintainability.
6
-
7
- ## 特性
8
-
9
- - Built on top of Express
10
- - Supports ES6 syntax
11
- - Modular Design
12
- - Supports multiple module routes
13
- - Supports multiple module views
14
- - Supports multiple module controllers
15
- - Supports multiple module services
16
- - Plugin-based architecture
17
- - Lightweight (core code within 300 lines)
18
- - Long-term maintenance
19
-
20
- ## Conventions Over Configuration
21
-
22
- ```code
23
- |- app
24
- |- config 配置
25
- |- module 模块1
26
- |- module1 模块1
27
- |- controller 控制器
28
- |- service 服务模型
29
- |- view 视图模板
30
- |- router.js 路由
31
- |- module2 模块2
32
- |- controller 控制器
33
- |- service 服务模型
34
- |- view 视图模板
35
- |- router.js路由
36
- |- extend 扩展
37
- |- middleware 中间件
38
- |- plugin 插件
39
- |- plus-module1 插件1
40
- |- controller 控制器
41
- |- service 服务模型
42
- |- view 视图模板
43
- |- router.js 路由
44
- |- module2 插件2
45
- |- controller 控制器
46
- |- service 服务模型
47
- |- view 视图模板
48
- |- router.js路由
49
- |- public 静态文件
50
- |- index.js
51
- ```
52
-
53
- ### Initialization Process
54
-
55
- - Initialization
56
- - Load configuration
57
- - Load modules
58
- - Load services
59
- - Load controllers
60
- - Load routers
61
- - Load extensions
62
- - Load plugins
63
- - Load services
64
- - Load controllers
65
- - Load routers
66
- - beforeStart() Hook to merge configurations from the database into the configuration
67
- - run() Start the server
68
-
69
- ### Official Website
70
-
71
- A CMS system developed with Chan.js
72
- Website:<https://www.chancms.top>
73
-
74
- ### Highlights
75
-
76
- - Configuration files
77
- - Multi-module MVC structure
78
- - Plugin MVC support
79
- - CORS cross-origin configuration support
80
- - MySQL database support
81
- - Route control
82
- - Art-template template engine
83
- - Static resources management
84
- - Cookie handling
85
- - Logging capabilities
86
-
87
- ### 运行
88
-
89
- ```javascript
90
- const Chanjs = require("chanjs");
91
- const chan = new Chanjs();
92
- // Load middleware
93
- chan.beforeStart(fn);
94
- // Scan modules
95
- chan.start();
96
- // Start the server
97
- chan.run();
98
- ```
99
-
100
- This framework is designed for developers who seek a balance between simplicity and functionality, providing a robust foundation for building web applications with ease.
@@ -1,45 +0,0 @@
1
- const path = require('path');
2
-
3
- /**
4
- * @description 根目录
5
- */
6
- const ROOT_PATH = process.cwd();
7
- // 读取package.json文件
8
- const {version='1.0.0',author='明空'} = require(path.join(ROOT_PATH, 'package.json'));
9
-
10
- /**
11
- * @description 程序目录
12
- */
13
- const APP_PATH = path.join(ROOT_PATH, 'app');
14
-
15
- let config = {
16
- JSON_LIMIT:"100kb",
17
- logger : {
18
- level: 'dev',
19
- },
20
- version,
21
- author,
22
- env:'dev',
23
- template:'default',
24
- views:[], //模板路径
25
- static:[{ //静态文件路径
26
- prefix: "/public/",
27
- dir: ["app/public"],
28
- maxAge: 0,
29
- }],
30
- database:{
31
- client: "mysql2",
32
- host: "localhost",
33
- port: "3306",
34
- user: "root",
35
- password: "123456",
36
- database: "chancms",
37
- charset: "utf8mb4",
38
- }
39
- }
40
-
41
- module.exports = {
42
- ROOT_PATH,
43
- APP_PATH,
44
- ...config
45
- }
@@ -1,25 +0,0 @@
1
- /**
2
- * @description
3
- * 控制器基类
4
- */
5
- class Controller {
6
- constructor() {}
7
-
8
- download(res, file) {
9
- res.download(file);
10
- }
11
-
12
- success(res, data = null) {
13
- res.json({ code: 200, msg: "success", data: data });
14
- }
15
-
16
- fail(res, msg = "操作失败,请稍后再试") {
17
- res.json({ code: 400, msg: msg });
18
- }
19
-
20
- error(res, msg) {
21
- res.json({ code: 500, msg: msg });
22
- }
23
- }
24
-
25
- module.exports = Controller;
@@ -1,78 +0,0 @@
1
- const knex = require('knex');
2
-
3
- /**
4
- * @description 实例化一个类,并将该类的所有方法绑定到一个新的对象上。
5
- * @param {Function} className - 需要实例化的类。
6
- *@returns {Object} 包含绑定方法的对象。
7
- */
8
- function bindClass(className) {
9
- let obj = {};
10
- const cls = new className();
11
- Object.getOwnPropertyNames(cls.constructor.prototype).forEach(
12
- (methodName) => {
13
- if (
14
- methodName !== "constructor" &&
15
- typeof cls[methodName] === "function"
16
- ) {
17
- obj[methodName] = cls[methodName].bind(cls);
18
- }
19
- }
20
- );
21
- return obj;
22
- }
23
-
24
-
25
- function createKnex(opt) {
26
- let config = {
27
- host:"localhost",
28
- port:"3306",
29
- client:"mysql2",
30
- charset:"utf8mb4",
31
- debug:false,
32
- ...opt
33
- };
34
- return knex({
35
- client: config.client,
36
- connection: {
37
- host:config.host,
38
- port:config.port,
39
- user:config.user,
40
- password:config.password,
41
- database:config.database,
42
- charset:config.charset,
43
- },
44
- debug: config.debug,
45
- //默认为{min: 2, max: 10}
46
- pool: {
47
- min: 0,
48
- max: 2,
49
- },
50
- log: {
51
- warn(message) {
52
- console.error("[knex warn]", message);
53
- },
54
- error(message) {
55
- console.error("[knex error]", message);
56
- },
57
- },
58
- });
59
- }
60
- /**
61
- *
62
- * @param {*} module 模块目录
63
- * @returns Array
64
- * @description 将web模块放到最后加载
65
- */
66
- function loadWebToEnd(module=[]){
67
- const index = module.indexOf('web');
68
- if (index !== -1) {
69
- const web = module.splice(index, 1);
70
- module.push(web[0]);
71
- }
72
- return module;
73
- }
74
- module.exports = {
75
- bindClass,
76
- createKnex,
77
- loadWebToEnd
78
- };
package/core/lib/index.js DELETED
@@ -1,41 +0,0 @@
1
- const express = require("express");
2
- const cookieParser = require("cookie-parser");
3
- const favicon = require("serve-favicon");
4
- const morgan = require("morgan");
5
- const path = require("path");
6
- const template = require("./middleware/template.js");
7
- module.exports = async function (app, config) {
8
- const { logger, APP_PATH, cookieKey, static, JSON_LIMIT, appName, version } =
9
- config;
10
- //日志
11
- app.use(morgan(logger.level));
12
-
13
- // favicon 图标
14
- app.use(favicon(path.join(APP_PATH, "public/favicon.ico")));
15
-
16
- //cookie
17
- app.use(cookieParser(cookieKey));
18
-
19
- //解析接口 json & url
20
- app.use(express.json({ limit: JSON_LIMIT }));
21
- app.use(express.urlencoded({ extended: false }));
22
-
23
- //配置模板引擎
24
- template(app, config);
25
-
26
- //使用静态资源 ,
27
- if (static.length > 0) {
28
- static.forEach((item) => {
29
- const { prefix, dir, maxAge } = item;
30
- app.use(prefix, express.static(dir, { maxAge: maxAge || 0 }));
31
- });
32
- }
33
-
34
- //设置头信息
35
- app.use((req, res, next) => {
36
- res.setHeader("Create-By", "Chanjs");
37
- res.setHeader("X-Powered-By", appName);
38
- res.setHeader(appName, version);
39
- next();
40
- });
41
- };
@@ -1,38 +0,0 @@
1
- const path = require("path");
2
- const template = require("art-template");
3
- const dayjs = require("dayjs");
4
-
5
- // 注册 dateFormat 函数
6
- template.defaults.imports.dateFormat = function (date, format) {
7
- if (!date) {
8
- return "";
9
- }
10
- // 如果传入的是一个 Date 对象,转换为 dayjs 对象
11
- if (
12
- date instanceof Date ||
13
- typeof date === "string" ||
14
- typeof date === "number"
15
- ) {
16
- date = dayjs(date);
17
- } else {
18
- return "";
19
- }
20
- return date.format(format);
21
- };
22
-
23
- module.exports = (app, config) => {
24
- const { APP_PATH, views, env } = config;
25
- //默认home view
26
- const home = path.join(APP_PATH, `modules/web/view`);
27
- //合并插件中的view
28
- const all = [...views, home];
29
-
30
- app.set("view options", {
31
- debug: env === "dev",
32
- cache: env === "prd",
33
- minimize: true,
34
- });
35
- app.set("view engine", "html");
36
- app.set("views", all);
37
- app.engine(".html", require("express-art-template"));
38
- };
@@ -1,190 +0,0 @@
1
- class BaseService {
2
- /**
3
- * @description 构造函数
4
- * @param {*} knex - knex实例
5
- * @param {*} model - 模型名称
6
- */
7
- constructor(knex, model = "") {
8
- this.knex = knex;
9
- this.model = model;
10
- }
11
-
12
- /**
13
- * @description 查找所有符合条件的记录
14
- * @param {*} query - 查询条件,例如:{name: 'test', age: 18}
15
- * @returns {Promise} 返回符合条件的记录
16
- */
17
- query(query) {
18
- return this.knex(this.model).where(query);
19
- }
20
-
21
- /**
22
- * @description 查询表所有记录,慎用
23
- * @returns {Promise} 返回所有记录
24
- */
25
- all() {
26
- return this.knex(this.model).select();
27
- }
28
-
29
- /**
30
- * @description 查询指定id的记录
31
- * @param {*} id
32
- * @returns {Promise} 返回指定id的记录
33
- */
34
- findById(id) {
35
- return this.knex(this.model).where("id", id).first();
36
- }
37
-
38
- /**
39
- * @description 查询分页数据
40
- * @param {*} current
41
- * @param {*} pageSize
42
- * @param {*} query
43
- * @returns {Promise} 返回分页数据
44
- */
45
- async findListAndQuery(current = 1, pageSize = 10, query = {}) {
46
- const offset = (current - 1) * pageSize;
47
-
48
- let countQuery = this.knex(this.model).count("* as total");
49
- let dataQuery = this.knex(this.model);
50
-
51
- // 应用查询条件
52
- for (const key in query) {
53
- dataQuery = dataQuery.where(key, query[key]);
54
- countQuery = countQuery.where(key, query[key]);
55
- }
56
-
57
- // 获取总记录数
58
- const total = await countQuery.first();
59
-
60
- // 获取分页数据
61
- const data = await dataQuery.offset(offset).limit(pageSize);
62
-
63
- return { data, total: parseInt(total.total, 10) };
64
- }
65
-
66
- /**
67
- * @description 查询指定id的记录
68
- * @param {*} id - 记录id
69
- * @returns {Promise} 返回指定id的记录
70
- */
71
- findOneById(id) {
72
- return this.knex(this.model).where("id", id).select();
73
- }
74
-
75
- /**
76
- * @description 查询指定条件的记录
77
- * @param {Object} query - {<key>:<value>}
78
- * @returns {Promise} 返回指定条件的记录
79
- */
80
- findOne(query) {
81
- return this.knex(this.model).where(query).first();
82
- }
83
-
84
- /**
85
- * @description 更新指定id的记录
86
- * @param {*} id - 记录id
87
- * @param {*} params - {<key>:<value>}
88
- * @returns {Promise} 返回更新后的记录
89
- */
90
- findOneAndUpdate(id, params) {
91
- return this.knex(this.model).where("id", id).update(params).returning("*");
92
- }
93
-
94
- /**
95
- * @description 查询指定条件的记录数量
96
- * @param {*} query - {<key>:<value>}
97
- * @returns {Promise} 返回指定条件的记录数量
98
- */
99
- count(query) {
100
- return this.knex(this.model).where(query).count("* as total").first();
101
- }
102
-
103
- /**
104
- * @description 插入一条记录
105
- * @param {*} params - {<key>:<value>}
106
- * @returns {Promise} 返回插入后的记录
107
- */
108
- insert(params) {
109
- return this.knex(this.model).insert(params);
110
- }
111
-
112
- /**
113
- * @description 插入多条记录
114
- * @param {*} records - [{<key>:<value>}, {<key>:<value>}, ...]
115
- * @returns {Promise} 返回插入后的记录
116
- */
117
- insertMany(records) {
118
- return this.knex(this.model).insert(records);
119
- }
120
-
121
- /**
122
- * @description 更新指定id的记录
123
- * @param {*} id - 记录id
124
- * @param {*} params - {<key>:<value>}
125
- * @returns {Promise} 返回更新后的记录
126
- */
127
- updateById(id, params) {
128
- return this.knex(this.model).where("id", id).update(params);
129
- }
130
-
131
- /**
132
- * @description 更新数据
133
- * @param {*} query - {<key>:<value>}
134
- * @param {*} update - {<key>:<value>}
135
- * @returns {Promise<*>} - 返回更新后的数据
136
- */
137
- update(query, update) {
138
- return this.knex(this.model).where(query).update(update);
139
- }
140
-
141
- /**
142
- * @description 查询并更新
143
- * @param {*} query - {<key>:<value>}
144
- * @param {*} update - {<key>:<value>}
145
- * @returns {Promise<*>} - 返回更新后的记录
146
- */
147
- findAndModify(query, update) {
148
- return this.knex(this.model).where(query).update(update);
149
- }
150
-
151
- /**
152
- *
153
- * @param {*} id - id
154
- * @param {*} update - {<key>:<value>}
155
- * @returns {Promise<*>} - 返回更新后的记录
156
- */
157
- findByIdAndUpdate(id, update) {
158
- return this.knex(this.model).where("id", id).update(update);
159
- }
160
-
161
- /**
162
- * @description 根据条件更新记录
163
- * @param {*} query - {<key>:<value>}
164
- * @param {*} update - {<key>:<value>}
165
- * @returns {Promise} - 返回更新后的记录
166
- */
167
- findOneAndUpdate(query, update) {
168
- return this.knex(this.model).where(query).update(update);
169
- }
170
-
171
- /**
172
- * @description 根据id删除一条记录
173
- * @param {*} id - 记录id
174
- * @returns {Promise} - 返回删除的记录
175
- */
176
- findByIdAndRemove(id) {
177
- return this.knex(this.model).where("id", id).del();
178
- }
179
-
180
- /**
181
- * @description 根据条件删除一条记录
182
- * @param {*} query
183
- * @returns {Promise} - 返回删除的记录
184
- */
185
- findOneAndRemove(query) {
186
- return this.knex(this.model).where(query).del();
187
- }
188
- }
189
-
190
- module.exports = BaseService;
package/publish.bat DELETED
@@ -1,4 +0,0 @@
1
- npm config set proxy null
2
- npm cache clean --force
3
- npm config set registry http://registry.npmmirror.com
4
- npm publish