huxy-node-server 1.0.8 → 1.0.9

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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/index.js +112 -109
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "huxy-node-server",
3
- "version": "1.0.8",
3
+ "version": "1.0.9",
4
4
  "description": "一个精炼、高性能的 Express.js 服务器模板,为现代 Node.js 应用程序设计,提供灵活的功能和最佳实践。",
5
5
  "type": "module",
6
6
  "module": "./src/index.js",
package/src/index.js CHANGED
@@ -9,23 +9,23 @@ import q from 'node:https';
9
9
  import b from 'pino';
10
10
  import j from 'node:os';
11
11
  import G from 'node:net';
12
- var c = (e = new Date()) => e.toLocaleString('zh-CN', {timeZone: 'Asia/Shanghai', hour12: !1}),
12
+ var m = (e = new Date()) => e.toLocaleString('zh-CN', {timeZone: 'Asia/Shanghai', hour12: !1}),
13
13
  w = e => Object.prototype.toString.call(e).slice(8, -1).toLowerCase(),
14
- g = e => {
14
+ h = e => {
15
15
  let r = e ? 'https' : 'http',
16
- o = j.networkInterfaces(),
17
- t = [];
18
- return (Object.keys(o).map(n => t.push(...o[n])), t.filter(n => n.family === 'IPv4').map(n => n.address));
16
+ t = j.networkInterfaces(),
17
+ o = [];
18
+ return (Object.keys(t).map(n => o.push(...t[n])), o.filter(n => n.family === 'IPv4').map(n => n.address));
19
19
  },
20
20
  y = e => {
21
21
  let r = e ?? process.argv.slice(2) ?? [],
22
- o = {};
22
+ t = {};
23
23
  return (
24
- r.map(t => {
25
- let [s, n] = t.split('=');
26
- o[s] = n;
24
+ r.map(o => {
25
+ let [s, n] = o.split('=');
26
+ t[s] = n;
27
27
  }),
28
- o
28
+ t
29
29
  );
30
30
  },
31
31
  F = {
@@ -42,67 +42,67 @@ var c = (e = new Date()) => e.toLocaleString('zh-CN', {timeZone: 'Asia/Shanghai'
42
42
  JWT_SECRET: 'secret',
43
43
  AUTH_TOKEN: 'authToken',
44
44
  },
45
- V = (e, r, o) => {
46
- let [t, s] = e.split('.');
47
- t && s ? (o[t] || (o[t] = {}), (o[t][s] = r)) : (o[t] = r);
45
+ V = (e, r, t) => {
46
+ let [o, s] = e.split('.');
47
+ o && s ? (t[o] || (t[o] = {}), (t[o][s] = r)) : (t[o] = r);
48
48
  },
49
49
  v = (e = {}, r = F) => {
50
- let {env: o} = process;
50
+ let {env: t} = process;
51
51
  Object.keys(r).map(s => {
52
- let n = o[s] ?? e[s];
52
+ let n = t[s] ?? e[s];
53
53
  n && V(r[s], n, e);
54
54
  });
55
- let t = {...e, ...y()};
56
- return ((t.port = t.staticPort || t.port), (t.isDev = t.nodeEnv === 'development'), (t.protocol = 'http'), t);
55
+ let o = {...e, ...y()};
56
+ return ((o.port = o.staticPort || o.port), (o.isDev = o.nodeEnv === 'development'), (o.protocol = 'http'), o);
57
57
  },
58
58
  x = (e, r = '127.0.0.1') =>
59
- new Promise(o => {
60
- let t = G.createServer();
61
- (t.once('error', s => {
62
- (t.close(), o((s.code === 'EADDRINUSE', !1)));
59
+ new Promise(t => {
60
+ let o = G.createServer();
61
+ (o.once('error', s => {
62
+ (o.close(), t((s.code === 'EADDRINUSE', !1)));
63
63
  }),
64
- t.once('listening', () => {
65
- (t.close(), o(!0));
64
+ o.once('listening', () => {
65
+ (o.close(), t(!0));
66
66
  }),
67
- t.listen(Number(e), r));
67
+ o.listen(Number(e), r));
68
68
  }),
69
- A = (e, r = {}, o) => {
70
- let t = s => {
71
- (o.warn(`\u6536\u5230 ${s} \u4FE1\u53F7, \u{1F6D1} \u6B63\u5728\u5173\u95ED\u670D\u52A1\u5668...`),
69
+ A = (e, r = {}, t) => {
70
+ let o = s => {
71
+ (t.warn(`\u6536\u5230 ${s} \u4FE1\u53F7, \u{1F6D1} \u6B63\u5728\u5173\u95ED\u670D\u52A1\u5668...`),
72
72
  e.close(async () => {
73
- (o.info('\u{1F44B} \u670D\u52A1\u5668\u5DF2\u5173\u95ED'), await r.shutdown?.(), process.exit(0));
73
+ (t.info('\u{1F44B} \u670D\u52A1\u5668\u5DF2\u5173\u95ED'), await r.shutdown?.(), process.exit(0));
74
74
  }),
75
75
  setTimeout(() => {
76
- (o.error('\u274C \u5F3A\u5236\u5173\u95ED\u670D\u52A1\u5668'), process.exit(1));
76
+ (t.error('\u274C \u5F3A\u5236\u5173\u95ED\u670D\u52A1\u5668'), process.exit(1));
77
77
  }, 5e3));
78
78
  };
79
- (process.on('SIGTERM', () => t('SIGTERM')),
80
- process.on('SIGINT', () => t('SIGINT')),
79
+ (process.on('SIGTERM', () => o('SIGTERM')),
80
+ process.on('SIGINT', () => o('SIGINT')),
81
81
  process.on('uncaughtException', s => {
82
- (o.fatal(s, `\u{1F4A5} \u672A\u6355\u83B7\u7684\u5F02\u5E38: ${s.message}`), process.exit(1));
82
+ (t.fatal(s, `\u{1F4A5} \u672A\u6355\u83B7\u7684\u5F02\u5E38: ${s.message}`), process.exit(1));
83
83
  }),
84
84
  process.on('unhandledRejection', (s, n) => {
85
- (o.fatal({reason: s, promise: n}, '\u26A0\uFE0F \u672A\u5904\u7406\u7684 Promise \u62D2\u7EDD'), process.exit(1));
85
+ (t.fatal({reason: s, promise: n}, '\u26A0\uFE0F \u672A\u5904\u7406\u7684 Promise \u62D2\u7EDD'), process.exit(1));
86
86
  }));
87
87
  },
88
- $ = (e, {port: r, host: o = '0.0.0.0'} = {}) =>
89
- new Promise((t, s) => {
90
- let n = a => {
91
- (p(), s(a));
88
+ $ = (e, {port: r, host: t = '0.0.0.0'} = {}) =>
89
+ new Promise((o, s) => {
90
+ let n = c => {
91
+ (a(), s(c));
92
92
  },
93
93
  i = () => {
94
- (p(), t(e));
94
+ (a(), o(e));
95
95
  },
96
- p = () => {
96
+ a = () => {
97
97
  (e.off('error', n), e.off('listening', i));
98
98
  };
99
- (e.once('error', n), e.once('listening', i), e.listen(r, o));
99
+ (e.once('error', n), e.once('listening', i), e.listen(r, t));
100
100
  }),
101
101
  R = (e, r = 56) => {
102
- let o = e.length,
103
- t = r - o,
104
- s = ~~(t / 2);
105
- return `${'-'.repeat(s)}${e}${'-'.repeat(t - s)}`;
102
+ let t = e.length,
103
+ o = r - t,
104
+ s = ~~(o / 2);
105
+ return `${'-'.repeat(s)}${e}${'-'.repeat(o - s)}`;
106
106
  };
107
107
  import 'dotenv';
108
108
  var W = {
@@ -125,46 +125,50 @@ var W = {
125
125
  logLevel: process.env.LOG_LEVEL || 30,
126
126
  },
127
127
  S = W;
128
- var f = (e, {transportOpt: r, ...o} = {}) =>
128
+ var u = (e, {transportOpt: r, ...t} = {}) =>
129
129
  b({
130
130
  name: e,
131
131
  level: S.logLevel,
132
- formatters: {level: t => ({level: t})},
132
+ formatters: {level: o => ({level: o})},
133
133
  timestamp: b.stdTimeFunctions.isoTime,
134
134
  base: null,
135
135
  transport: {target: 'pino-pretty', options: {colorize: !0, levelFirst: !0, ...r}, ignore: 'pid,hostname,level,time', translateTime: 'SYS:yyyy-mm-dd HH:MM:ss'},
136
- ...o,
136
+ ...t,
137
137
  });
138
- var h = f;
139
- var O = f('error-handler'),
140
- N = e => (r, o, t) => {
141
- (O.error({message: 'Not Found', timestamp: c(), url: r.originalUrl, method: r.method, ip: r.ip, userAgent: r.get('User-Agent')}, '\u627E\u4E0D\u5230\u8DEF\u5F84'),
142
- o.status(404).json({success: !1, status: 404, url: r.originalUrl, message: `\u8DEF\u7531 [${r.method} ${r.originalUrl}] \u4E0D\u5B58\u5728`, timestamp: c()}));
138
+ var f = u;
139
+ var O = u('error-handler'),
140
+ N = e => (r, t, o) => {
141
+ (O.error({message: 'Not Found', timestamp: m(), url: r.originalUrl, method: r.method, ip: r.ip, userAgent: r.get('User-Agent')}, '\u627E\u4E0D\u5230\u8DEF\u5F84'),
142
+ t.status(404).json({success: !1, status: 404, url: r.originalUrl, message: `\u8DEF\u7531 [${r.method} ${r.originalUrl}] \u4E0D\u5B58\u5728`, timestamp: m()}));
143
143
  },
144
- _ = e => (r, o, t, s) => {
144
+ _ = e => (r, t, o, s) => {
145
145
  let n = r.status || 500,
146
146
  i = r.message;
147
- (O.error({message: i, timestamp: c(), stack: r.stack, url: o.originalUrl, method: o.method, ip: o.ip, userAgent: o.get('User-Agent')}, '\u670D\u52A1\u5668\u5185\u90E8\u9519\u8BEF'),
148
- t.status(n).json({success: !1, message: (e.isDev, i), stack: e.isDev ? r.stack : void 0, timestamp: c()}));
147
+ (O.error({message: i, timestamp: m(), stack: r.stack, url: t.originalUrl, method: t.method, ip: t.ip, userAgent: t.get('User-Agent')}, '\u670D\u52A1\u5668\u5185\u90E8\u9519\u8BEF'),
148
+ o.status(n).json({success: !1, message: (e.isDev, i), stack: e.isDev ? r.stack : void 0, timestamp: m()}));
149
149
  };
150
150
  import {Router as K} from 'express';
151
151
  var z = e => {
152
152
  let r = K();
153
153
  return (
154
- r.use('/health', (o, t) => {
155
- t.status(200).json({status: 'OK', timestamp: c(), environment: e.nodeEnv, uptime: process.uptime(), memoryUsage: process.memoryUsage(), pid: process.pid});
154
+ r.use('/health', (t, o) => {
155
+ o.status(200).json({status: 'OK', timestamp: m(), environment: e.nodeEnv, uptime: process.uptime(), memoryUsage: process.memoryUsage(), pid: process.pid});
156
156
  }),
157
- r.get('/', (o, t) => {
158
- t.status(200).json({message: 'Node.js \u670D\u52A1\u5668\u8FD0\u884C\u4E2D', timestamp: c(), environment: e.nodeEnv});
157
+ r.get('/', (t, o) => {
158
+ o.status(200).json({message: 'Node.js \u670D\u52A1\u5668\u8FD0\u884C\u4E2D', timestamp: m(), environment: e.nodeEnv});
159
159
  }),
160
160
  r
161
161
  );
162
162
  },
163
163
  M = z;
164
- var ee = (e, r = {}, o) => {
164
+ var ee = (e, r = {}) => {
165
165
  (e.disable('x-powered-by'),
166
166
  e.set('trust proxy', r.trustProxy ?? 1),
167
- e.use(Z({logger: o, quietReqLogger: !0, autoLogging: !1, genReqId: !1})),
167
+ r.httpLogger
168
+ ? e.use((t, o, s) => {
169
+ t.log = r.httpLogger;
170
+ })
171
+ : e.use(Z({logger: f('http-request', r.loggerConfig), quietReqLogger: !0, autoLogging: !1, genReqId: !1})),
168
172
  e.use(Y()),
169
173
  e.use(B(r.helmet)),
170
174
  e.use(X(r.cors)),
@@ -176,50 +180,49 @@ var ee = (e, r = {}, o) => {
176
180
  (e.use(M(r)), e.use(N(r)), e.use(_(r)));
177
181
  },
178
182
  oe = async (e = {}, r) => {
179
- let o = h(e.loggerName || 'huxy', e.loggerConfig),
180
- t = h('http-request', e.loggerConfig),
181
- s = v(e),
182
- {port: n, ssl: i} = s;
183
- (await x(n, s.host)) || ((s.port = Number(n) + 1), o.warn(`\u7AEF\u53E3 ${n} \u5DF2\u88AB\u5360\u7528\uFF0C\u73B0\u5728\u4F7F\u7528\u7AEF\u53E3 ${s.port}`));
183
+ let t = v(e),
184
+ o = t.logger ?? f(t.loggerName || 'huxy', t.loggerConfig),
185
+ {port: s, ssl: n} = t;
186
+ (await x(s, t.host)) || ((t.port = Number(s) + 1), o.warn(`\u7AEF\u53E3 ${s} \u5DF2\u88AB\u5360\u7528\uFF0C\u73B0\u5728\u4F7F\u7528\u7AEF\u53E3 ${t.port}`));
184
187
  let a = L();
185
- ee(a, s, t);
186
- let l;
187
- (i
188
- ? (w(i) === 'object' ||
188
+ ee(a, t);
189
+ let c;
190
+ (n
191
+ ? (w(n) === 'object' ||
189
192
  (o.error({ssl: {key: '/path/to/name.key', cert: '/path/to/name.pem'}}, '\u26A0\uFE0F \u8BF7\u8BBE\u7F6E\u6709\u6548 SSL \u6216\u8BBE\u7F6E {ssl: false}'), process.exit(1)),
190
- (s.protocol = 'https'),
191
- (l = q.createServer(i, a)),
192
- C((d, u) => {
193
- (u.writeHead(301, {Location: `${s.protocol}://${d.headers.host}${d.url}`}), u.end());
193
+ (t.protocol = 'https'),
194
+ (c = q.createServer(n, a)),
195
+ C((l, d) => {
196
+ (d.writeHead(301, {Location: `${t.protocol}://${l.headers.host}${l.url}`}), d.end());
194
197
  }).listen(80))
195
- : (l = C(a)),
196
- A(l, s, o));
198
+ : (c = C(a)),
199
+ A(c, t, o));
197
200
  try {
198
- await $(l, s);
199
- } catch (m) {
200
- (o.error({err: m}, '\u26A0\uFE0F \u670D\u52A1\u5668\u542F\u52A8\u5931\u8D25'), process.exit(1));
201
+ await $(c, t);
202
+ } catch (p) {
203
+ (o.error({err: p}, '\u26A0\uFE0F \u670D\u52A1\u5668\u542F\u52A8\u5931\u8D25'), process.exit(1));
201
204
  }
202
205
  try {
203
- await r?.(s, a, l, o);
204
- } catch (m) {
205
- (o.error({err: m}, `\u274C \u56DE\u8C03\u51FD\u6570\u9519\u8BEF\uFF1A${m.message}`), process.exit(1));
206
+ await r?.(t, a, c, o);
207
+ } catch (p) {
208
+ (o.error({err: p}, `\u274C \u56DE\u8C03\u51FD\u6570\u9519\u8BEF\uFF1A${p.message}`), process.exit(1));
206
209
  }
207
- return (te(a, s), {app: a, httpServer: l, config: s, logger: o});
210
+ return (te(a, t), {app: a, httpServer: c, config: t, logger: o});
208
211
  },
209
212
  D = oe;
210
- var re = (e, r, o) =>
211
- D({...S, ...e}, async (t, s, n, i) => {
212
- let {port: p, host: a, nodeEnv: l, basepath: m, appName: d = 'HuxyServer', protocol: u} = t;
213
- if (!o) {
214
- let U = g()
215
- .filter(E => E !== a)
216
- .map(E => `${u}://${E}:${p}${m}`);
213
+ var re = (e, r, t) =>
214
+ D({...S, ...e}, async (o, s, n, i) => {
215
+ let {port: a, host: c, nodeEnv: p, basepath: l, appName: d = 'HuxyServer', protocol: g} = o;
216
+ if (!t) {
217
+ let U = h()
218
+ .filter(E => E !== c)
219
+ .map(E => `${g}://${E}:${a}${l}`);
217
220
  (i.info(R(d)),
218
- i.info(`\u{1F680} \u670D\u52A1\u8FD0\u884C\u5728\u3010${l}\u3011\u73AF\u5883: ${u}://${a}:${p}${m}`),
219
- i.info(`-----------------[${c()}]------------------`),
221
+ i.info(`\u{1F680} \u670D\u52A1\u8FD0\u884C\u5728\u3010${p}\u3011\u73AF\u5883: ${g}://${c}:${a}${l}`),
222
+ i.info(`-----------------[${m()}]------------------`),
220
223
  i.info({ips: U}, '\u672C\u5730\u5730\u5740\uFF1A'));
221
224
  }
222
- await r?.(t, s, n, i);
225
+ await r?.(o, s, n, i);
223
226
  }),
224
227
  T = re;
225
228
  import ae from 'express';
@@ -231,32 +234,32 @@ var P = (e = import.meta.url) => ne(se(e)),
231
234
  var ce = {port: 9e3, host: 'localhost', basepath: '/', buildPath: './build'},
232
235
  me = e => (e ? (e.endsWith('/') ? e : `${e}/`) : '/'),
233
236
  pe = (e, r) =>
234
- T({...ce, ...e}, async (o, t, s, n) => {
235
- await r?.(o, t, s, n);
236
- let {basepath: i, buildPath: p} = o;
237
+ T({...ce, ...e}, async (t, o, s, n) => {
238
+ await r?.(t, o, s, n);
239
+ let {basepath: i, buildPath: a} = t;
237
240
  (i !== '/' &&
238
- t.get('/', (m, d, u) => {
239
- if (m.path === '/') return d.redirect(i);
240
- u();
241
+ o.get('/', (l, d, g) => {
242
+ if (l.path === '/') return d.redirect(i);
243
+ g();
241
244
  }),
242
- t.use(i, ae.static(p, {...o.staticCache})));
243
- let a = me(i),
244
- l = new RegExp(`^${a.replace(/\//g, '\\/')}(.*)$`);
245
- t.get(l, (m, d) => {
246
- d.sendFile(H(p, 'index.html'));
245
+ o.use(i, ae.static(a, {...t.staticCache})));
246
+ let c = me(i),
247
+ p = new RegExp(`^${c.replace(/\//g, '\\/')}(.*)$`);
248
+ o.get(p, (l, d) => {
249
+ d.sendFile(H(a, 'index.html'));
247
250
  });
248
251
  }),
249
252
  k = pe;
250
- var ot = {startServer: T, startStatic: k, logger: h, createLogger: f, dateTime: c, localIPs: g, nodeArgs: y, getEnvConfig: v, checkPort: x, getDirName: P, resolvePath: I};
253
+ var ot = {startServer: T, startStatic: k, logger: f, createLogger: u, dateTime: m, localIPs: h, nodeArgs: y, getEnvConfig: v, checkPort: x, getDirName: P, resolvePath: I};
251
254
  export {
252
255
  x as checkPort,
253
- f as createLogger,
254
- c as dateTime,
256
+ u as createLogger,
257
+ m as dateTime,
255
258
  ot as default,
256
259
  P as getDirName,
257
260
  v as getEnvConfig,
258
- g as localIPs,
259
- h as logger,
261
+ h as localIPs,
262
+ f as logger,
260
263
  y as nodeArgs,
261
264
  I as resolvePath,
262
265
  T as startServer,