@midwayjs/koa 3.20.11 → 3.20.13

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/dist/framework.js CHANGED
@@ -14,6 +14,7 @@ const koa = require("koa");
14
14
  const onerror_1 = require("./onerror");
15
15
  const qs = require("qs");
16
16
  const querystring = require("querystring");
17
+ const utils_1 = require("./utils");
17
18
  const COOKIES = Symbol('context#cookies');
18
19
  class KoaControllerGenerator extends core_1.WebControllerGenerator {
19
20
  constructor(app, webRouterService) {
@@ -182,7 +183,6 @@ let MidwayKoaFramework = class MidwayKoaFramework extends core_1.BaseFramework {
182
183
  return mwIns.resolve();
183
184
  }
184
185
  async run() {
185
- var _a;
186
186
  // load controller
187
187
  await this.loadMidwayController();
188
188
  // restore use method
@@ -218,19 +218,27 @@ let MidwayKoaFramework = class MidwayKoaFramework extends core_1.BaseFramework {
218
218
  if (core_1.Types.isNumber(this.configurationOptions.serverTimeout)) {
219
219
  this.server.setTimeout(this.configurationOptions.serverTimeout);
220
220
  }
221
+ this.configurationOptions.listenOptions = {
222
+ port: this.configurationOptions.port,
223
+ host: this.configurationOptions.hostname,
224
+ ...this.configurationOptions.listenOptions,
225
+ };
221
226
  // set port and listen server
222
- const customPort = (_a = process.env.MIDWAY_HTTP_PORT) !== null && _a !== void 0 ? _a : this.configurationOptions.port;
223
- if (customPort) {
227
+ let customPort = process.env.MIDWAY_HTTP_PORT ||
228
+ this.configurationOptions.listenOptions.port;
229
+ if (customPort === 0 || customPort === '0') {
230
+ customPort = await (0, utils_1.getFreePort)();
231
+ this.configurationOptions.listenOptions.port = customPort;
232
+ this.logger.info(`Midway koa is listening on port ${customPort} (auto assigned)`);
233
+ }
234
+ if (this.configurationOptions.listenOptions.port) {
224
235
  new Promise(resolve => {
225
- const args = [customPort];
226
- if (this.configurationOptions.hostname) {
227
- args.push(this.configurationOptions.hostname);
228
- }
229
- args.push(() => {
236
+ // 使用 ListenOptions 对象启动服务器
237
+ this.server.listen(this.configurationOptions.listenOptions, () => {
230
238
  resolve();
231
239
  });
232
- this.server.listen(...args);
233
- process.env.MIDWAY_HTTP_PORT = String(customPort);
240
+ // 设置环境变量
241
+ process.env.MIDWAY_HTTP_PORT = String(this.configurationOptions.listenOptions.port);
234
242
  });
235
243
  }
236
244
  }
@@ -238,6 +246,7 @@ let MidwayKoaFramework = class MidwayKoaFramework extends core_1.BaseFramework {
238
246
  if (this.server) {
239
247
  new Promise(resolve => {
240
248
  this.server.close(resolve);
249
+ process.env.MIDWAY_HTTP_PORT = '';
241
250
  });
242
251
  }
243
252
  }
@@ -1,10 +1,12 @@
1
1
  /// <reference types="node" />
2
2
  /// <reference types="node" />
3
+ /// <reference types="node" />
3
4
  import { IConfigurationOptions, IMidwayApplication, IMidwayContext } from '@midwayjs/core';
4
5
  import * as koa from 'koa';
5
6
  import { Context as KoaContext, DefaultState, Middleware, Next } from 'koa';
6
7
  import { RouterParamValue } from '@midwayjs/core';
7
8
  import * as qs from 'qs';
9
+ import { ListenOptions } from 'net';
8
10
  export interface State extends DefaultState {
9
11
  }
10
12
  export type IMidwayKoaContext = IMidwayContext<KoaContext>;
@@ -15,6 +17,10 @@ export type IMidwayKoaApplication = IMidwayApplication<IMidwayKoaContext, koa<St
15
17
  * @param middlewareId
16
18
  */
17
19
  generateMiddleware(middlewareId: any): Promise<Middleware<State, IMidwayKoaContext>>;
20
+ /**
21
+ * Get the port that the application is listening on
22
+ */
23
+ getPort(): string;
18
24
  }>;
19
25
  /**
20
26
  * @deprecated use NextFunction definition
@@ -86,7 +92,14 @@ export interface IMidwayKoaConfigurationOptions extends IConfigurationOptions {
86
92
  * qs options
87
93
  */
88
94
  queryParseOptions?: qs.IParseOptions;
95
+ /**
96
+ * https/https/http2 server options
97
+ */
89
98
  serverOptions?: Record<string, any>;
99
+ /**
100
+ * listen options
101
+ */
102
+ listenOptions?: ListenOptions;
90
103
  }
91
104
  export type MiddlewareParamArray = Array<Middleware<DefaultState, IMidwayKoaContext>>;
92
105
  export interface IWebMiddleware {
package/dist/utils.d.ts CHANGED
@@ -11,4 +11,5 @@ export declare const tpl = "\n<!DOCTYPE html>\n<html>\n <head>\n <title>Erro
11
11
  * @public
12
12
  */
13
13
  export declare function escapeHtml(string: any): string;
14
+ export declare function getFreePort(): Promise<number>;
14
15
  //# sourceMappingURL=utils.d.ts.map
package/dist/utils.js CHANGED
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.escapeHtml = exports.tpl = exports.isProduction = exports.sendToWormhole = exports.accepts = exports.detectStatus = void 0;
3
+ exports.getFreePort = exports.escapeHtml = exports.tpl = exports.isProduction = exports.sendToWormhole = exports.accepts = exports.detectStatus = void 0;
4
+ const net_1 = require("net");
4
5
  function detectStatus(err) {
5
6
  // detect status
6
7
  let status = err.status || 500;
@@ -153,4 +154,20 @@ function escapeHtml(string) {
153
154
  return lastIndex !== index ? html + str.substring(lastIndex, index) : html;
154
155
  }
155
156
  exports.escapeHtml = escapeHtml;
157
+ async function getFreePort() {
158
+ return new Promise((resolve, reject) => {
159
+ const server = (0, net_1.createServer)();
160
+ server.listen(0, () => {
161
+ try {
162
+ const port = server.address().port;
163
+ server.close();
164
+ resolve(port);
165
+ }
166
+ catch (err) {
167
+ reject(err);
168
+ }
169
+ });
170
+ });
171
+ }
172
+ exports.getFreePort = getFreePort;
156
173
  //# sourceMappingURL=utils.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@midwayjs/koa",
3
- "version": "3.20.11",
3
+ "version": "3.20.13",
4
4
  "description": "Midway Web Framework for KOA",
5
5
  "main": "dist/index.js",
6
6
  "typings": "index.d.ts",
@@ -26,6 +26,7 @@
26
26
  "devDependencies": {
27
27
  "@midwayjs/mock": "^3.20.11",
28
28
  "@types/koa-router": "7.4.8",
29
+ "axios": "1.8.4",
29
30
  "fs-extra": "11.3.0"
30
31
  },
31
32
  "dependencies": {
@@ -47,5 +48,5 @@
47
48
  "engines": {
48
49
  "node": ">=12"
49
50
  },
50
- "gitHead": "741e5e2cd200d44182bf893f348f58fb5c4e5404"
51
+ "gitHead": "f76931e4b5bd99c498d27a84c00f2114db81c8a3"
51
52
  }