chanjs 2.0.2 → 2.0.4
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/index.js +7 -10
- package/middleware/header.js +3 -3
- package/middleware/setBody.js +0 -1
- package/package.json +1 -1
- package/utils/db.js +66 -68
- package/utils/response.js +20 -26
package/index.js
CHANGED
@@ -29,13 +29,10 @@ class Chan {
|
|
29
29
|
getPackage,
|
30
30
|
loadController,
|
31
31
|
db,
|
32
|
-
z,
|
32
|
+
z,
|
33
33
|
validator,
|
34
|
-
};
|
34
|
+
};
|
35
35
|
static config = {}; //配置
|
36
|
-
//数据库
|
37
|
-
|
38
|
-
// static Router = express.Router; //路由
|
39
36
|
static Service = Service; //服务
|
40
37
|
static Controller = Controller; //控制器
|
41
38
|
static extend = {}; //组件扩展
|
@@ -68,10 +65,10 @@ class Chan {
|
|
68
65
|
const {
|
69
66
|
views,
|
70
67
|
env,
|
71
|
-
|
72
|
-
|
68
|
+
APP_NAME,
|
69
|
+
APP_VERSION,
|
73
70
|
cookieKey,
|
74
|
-
|
71
|
+
BODY_LIMIT,
|
75
72
|
statics,
|
76
73
|
logger,
|
77
74
|
cors,
|
@@ -80,11 +77,11 @@ class Chan {
|
|
80
77
|
log(this.app, logger);
|
81
78
|
setFavicon(this.app);
|
82
79
|
setCookie(this.app, cookieKey);
|
83
|
-
setBody(this.app,
|
80
|
+
setBody(this.app, BODY_LIMIT);
|
84
81
|
setTemplate(this.app, { views, env });
|
85
82
|
setStatic(this.app, statics);
|
86
83
|
Cors(this.app, cors);
|
87
|
-
setHeader(this.app, {
|
84
|
+
setHeader(this.app, { APP_NAME, APP_VERSION });
|
88
85
|
}
|
89
86
|
|
90
87
|
//数据库操作
|
package/middleware/header.js
CHANGED
@@ -1,9 +1,9 @@
|
|
1
|
-
export let setHeader = (app, {
|
1
|
+
export let setHeader = (app, { APP_NAME, APP_VERSION })=>{
|
2
2
|
app.use((req, res, next) => {
|
3
3
|
res.setHeader("Create-By", "Chanjs");
|
4
4
|
res.setHeader("X-Powered-By", "ChanCMS");
|
5
|
-
res.setHeader("ChanCMS",
|
6
|
-
res.setHeader("Server",
|
5
|
+
res.setHeader("ChanCMS", APP_VERSION);
|
6
|
+
res.setHeader("Server", APP_NAME);
|
7
7
|
next();
|
8
8
|
});
|
9
9
|
};
|
package/middleware/setBody.js
CHANGED
package/package.json
CHANGED
package/utils/db.js
CHANGED
@@ -1,77 +1,75 @@
|
|
1
|
-
import knex from
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
} ) {
|
15
|
-
|
1
|
+
import knex from "knex";
|
2
|
+
export const db = function ({
|
3
|
+
client = "mysql2",
|
4
|
+
host = "127.0.0.1",
|
5
|
+
user = "root",
|
6
|
+
password = "123456",
|
7
|
+
database = "test",
|
8
|
+
port = 3306,
|
9
|
+
debug = true,
|
10
|
+
charset = "utf8mb4",
|
11
|
+
min = 0,
|
12
|
+
max = 2,
|
13
|
+
}) {
|
16
14
|
let config = {
|
17
|
-
client
|
15
|
+
client,
|
18
16
|
connection: {
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
17
|
+
host,
|
18
|
+
port,
|
19
|
+
user,
|
20
|
+
password,
|
21
|
+
database,
|
22
|
+
charset,
|
23
|
+
},
|
25
24
|
debug,
|
26
|
-
pool: {
|
27
|
-
|
28
|
-
|
29
|
-
|
25
|
+
pool: {
|
26
|
+
//默认为{min: 2, max: 10},连接池配置
|
27
|
+
min,
|
28
|
+
max,
|
29
|
+
},
|
30
30
|
log: {
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
},
|
52
|
-
|
31
|
+
warn(message) {
|
32
|
+
console.error("[knex warn]", message);
|
33
|
+
},
|
34
|
+
error(message) {
|
35
|
+
console.error("[knex error]", message);
|
36
|
+
},
|
37
|
+
debug(message) {
|
38
|
+
console.log("[knex debug]", message);
|
39
|
+
},
|
40
|
+
deprecate(message) {
|
41
|
+
console.warn("[knex deprecate]", message);
|
42
|
+
},
|
43
|
+
trace(message) {
|
44
|
+
console.log("[knex trace]", message);
|
45
|
+
},
|
46
|
+
log(message) {
|
47
|
+
console.log("[knex log]", message);
|
48
|
+
},
|
49
|
+
info(message) {
|
50
|
+
console.log("[knex info]", message);
|
53
51
|
},
|
54
|
-
}
|
55
|
-
|
56
|
-
|
52
|
+
},
|
53
|
+
};
|
54
|
+
return knex(config);
|
55
|
+
};
|
57
56
|
|
58
57
|
const errCode = {
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
}
|
58
|
+
ECONNREFUSED: "数据库连接被拒绝,请检查数据库服务是否正常运行。",
|
59
|
+
ER_ACCESS_DENIED_ERROR: "无权限访问,账号或密码错误。",
|
60
|
+
ER_ROW_IS_REFERENCED_2: "无法删除或更新记录,存在关联数据。",
|
61
|
+
ER_BAD_FIELD_ERROR: "SQL语句中包含无效字段,请检查查询条件或列名。",
|
62
|
+
ER_DUP_ENTRY: "插入失败:数据重复,违反唯一性约束。",
|
63
|
+
ER_NO_SUCH_TABLE: "操作失败:目标表不存在。",
|
64
|
+
ETIMEOUT: "数据库操作超时,请稍后再试。",
|
65
|
+
};
|
67
66
|
const getDefaultErrorMessage = (error) => {
|
68
|
-
if (error.message.includes(
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
return '数据库权限不足,请检查配置。';
|
67
|
+
if (error.message.includes("syntax") || error.message.includes("SQL")) {
|
68
|
+
return "数据库语法错误,请检查您的查询语句。";
|
69
|
+
} else if (error.message.includes("Connection closed")) {
|
70
|
+
return "数据库连接已关闭,请重试。";
|
71
|
+
} else if (error.message.includes("permission")) {
|
72
|
+
return "数据库权限不足,请检查配置。";
|
75
73
|
}
|
76
|
-
return
|
77
|
-
}
|
74
|
+
return "数据库发生未知错误,请稍后重试。";
|
75
|
+
};
|
package/utils/response.js
CHANGED
@@ -1,26 +1,20 @@
|
|
1
|
-
export
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
}
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
success: false,
|
22
|
-
msg: "ϵͳ�쳣",
|
23
|
-
code,
|
24
|
-
data,
|
25
|
-
};
|
26
|
-
};
|
1
|
+
export function parseJsonFields(obj) {
|
2
|
+
const result = {};
|
3
|
+
for (const key in obj) {
|
4
|
+
if (!obj.hasOwnProperty(key)) continue;
|
5
|
+
const value = obj[key];
|
6
|
+
// 如果是字符串,并且看起来像 JSON(以 { 或 [ 开头)
|
7
|
+
if (typeof value === 'string' && (value.startsWith('{') || value.startsWith('['))) {
|
8
|
+
try {
|
9
|
+
result[key] = JSON.parse(value);
|
10
|
+
} catch (e) {
|
11
|
+
console.warn(`JSON parse failed for field: ${key}`, e);
|
12
|
+
result[key] = value; // 保留原始值
|
13
|
+
}
|
14
|
+
} else {
|
15
|
+
result[key] = value;
|
16
|
+
}
|
17
|
+
}
|
18
|
+
|
19
|
+
return result;
|
20
|
+
}
|