diff --git a/config/config.default.js b/config/config.default.js index 49d3eee46..476e38825 100644 --- a/config/config.default.js +++ b/config/config.default.js @@ -304,7 +304,7 @@ module.exports = appInfo => { * @property {Number} httpsAgent.maxSockets - https agent max socket number of one host, default is `Number.MAX_SAFE_INTEGER` @ses https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER * @property {Number} httpsAgent.maxFreeSockets - https agent max free socket number of one host, default is 256. * @property {Boolean} useHttpClientNext - use urllib@3 HttpClient, default is false - * @property {Boolean} allowH2 - use urllib@4 HttpClient and enable H2, default is false + * @property {Boolean} allowH2 - use urllib@4 HttpClient and enable H2, default is false. Only works on Node.js >= 18 */ config.httpclient = { enableDNSCache: false, diff --git a/lib/egg.js b/lib/egg.js index c57371273..919e77087 100644 --- a/lib/egg.js +++ b/lib/egg.js @@ -14,13 +14,19 @@ const Messenger = require('./core/messenger'); const DNSCacheHttpClient = require('./core/dnscache_httpclient'); const HttpClient = require('./core/httpclient'); const HttpClientNext = require('./core/httpclient_next'); -const HttpClient4 = require('./core/httpclient4'); const createLoggers = require('./core/logger'); const Singleton = require('./core/singleton'); const utils = require('./core/utils'); const BaseContextClass = require('./core/base_context_class'); const BaseHookClass = require('./core/base_hook_class'); +let HttpClient4 = HttpClientNext; +const mainNodejsVersion = parseInt(process.versions.node.split('.')[0]); +if (mainNodejsVersion >= 18) { + // urllib@4 only works on Node.js >= 18 + HttpClient4 = require('./core/httpclient4'); +} + const HTTPCLIENT = Symbol('EggApplication#httpclient'); const LOGGERS = Symbol('EggApplication#loggers'); const EGG_PATH = Symbol.for('egg#eggPath'); diff --git a/test/fixtures/apps/httpclient-tracer/app.js b/test/fixtures/apps/httpclient-tracer/app.js index 0b6d6e866..80fd82b24 100644 --- a/test/fixtures/apps/httpclient-tracer/app.js +++ b/test/fixtures/apps/httpclient-tracer/app.js @@ -28,14 +28,14 @@ module.exports = app => { }); assert(res.status === 200); - res = await httpclient.request('https://github.com', { + res = await httpclient.request('https://registry.npmmirror.com', { method: 'GET', timeout: 20000, }); assert(res.status === 200); - res = await httpclient.request('https://www.npmjs.com', { + res = await httpclient.request('https://npmmirror.com', { method: 'GET', timeout: 20000, }); diff --git a/test/lib/core/httpclient.test.js b/test/lib/core/httpclient.test.js index 4b4f8e274..755fd6c5b 100644 --- a/test/lib/core/httpclient.test.js +++ b/test/lib/core/httpclient.test.js @@ -589,13 +589,13 @@ describe('test/lib/core/httpclient.test.js', () => { }); assert(res.status === 200); - res = await httpclient.request('https://github.com', { + res = await httpclient.request('https://registry.npmmirror.com', { method: 'GET', timeout: 20000, }); assert(res.status === 200); - res = await httpclient.request('https://www.npmjs.com', { + res = await httpclient.request('https://npmmirror.com', { method: 'GET', timeout: 20000, });