https: make opts optional & immutable when create
`opts` in `createServer` will be immutable that won't change origional opts value. What's more, it's optional which can make `requestListener` be the first argument. PR-URL: https://github.com/nodejs/node/pull/13599 Fixes: https://github.com/nodejs/node/issues/13584 Reviewed-By: Refael Ackermann <refack@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Yorkie Liu <yorkiefixer@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Brian White <mscdex@mscdex.net>
This commit is contained in:
parent
2f34bf0f77
commit
c1c226719f
@ -46,7 +46,7 @@ added: v8.0.0
|
|||||||
|
|
||||||
See [`http.Server#keepAliveTimeout`][].
|
See [`http.Server#keepAliveTimeout`][].
|
||||||
|
|
||||||
## https.createServer(options[, requestListener])
|
## https.createServer([options][, requestListener])
|
||||||
<!-- YAML
|
<!-- YAML
|
||||||
added: v0.3.4
|
added: v0.3.4
|
||||||
-->
|
-->
|
||||||
|
@ -34,6 +34,12 @@ const { urlToOptions, searchParamsSymbol } = require('internal/url');
|
|||||||
function Server(opts, requestListener) {
|
function Server(opts, requestListener) {
|
||||||
if (!(this instanceof Server)) return new Server(opts, requestListener);
|
if (!(this instanceof Server)) return new Server(opts, requestListener);
|
||||||
|
|
||||||
|
if (typeof opts === 'function') {
|
||||||
|
requestListener = opts;
|
||||||
|
opts = undefined;
|
||||||
|
}
|
||||||
|
opts = util._extend({}, opts);
|
||||||
|
|
||||||
if (process.features.tls_npn && !opts.NPNProtocols) {
|
if (process.features.tls_npn && !opts.NPNProtocols) {
|
||||||
opts.NPNProtocols = ['http/1.1', 'http/1.0'];
|
opts.NPNProtocols = ['http/1.1', 'http/1.0'];
|
||||||
}
|
}
|
||||||
|
44
test/parallel/test-https-argument-of-creating.js
Normal file
44
test/parallel/test-https-argument-of-creating.js
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const common = require('../common');
|
||||||
|
if (!common.hasCrypto) {
|
||||||
|
common.skip('missing crypto');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const assert = require('assert');
|
||||||
|
const https = require('https');
|
||||||
|
const tls = require('tls');
|
||||||
|
|
||||||
|
const dftProtocol = {};
|
||||||
|
|
||||||
|
// test for immutable `opts`
|
||||||
|
{
|
||||||
|
const opts = { foo: 'bar', NPNProtocols: [ 'http/1.1' ] };
|
||||||
|
const server = https.createServer(opts);
|
||||||
|
|
||||||
|
tls.convertNPNProtocols([ 'http/1.1' ], dftProtocol);
|
||||||
|
assert.deepStrictEqual(opts, { foo: 'bar', NPNProtocols: [ 'http/1.1' ] });
|
||||||
|
assert.strictEqual(server.NPNProtocols.compare(dftProtocol.NPNProtocols), 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// validate that `createServer` can work with the only argument requestListener
|
||||||
|
{
|
||||||
|
const mustNotCall = common.mustNotCall();
|
||||||
|
const server = https.createServer(mustNotCall);
|
||||||
|
|
||||||
|
tls.convertNPNProtocols([ 'http/1.1', 'http/1.0' ], dftProtocol);
|
||||||
|
assert.strictEqual(server.NPNProtocols.compare(dftProtocol.NPNProtocols), 0);
|
||||||
|
assert.strictEqual(server.listeners('request').length, 1);
|
||||||
|
assert.strictEqual(server.listeners('request')[0], mustNotCall);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// validate that `createServer` can work with no arguments
|
||||||
|
{
|
||||||
|
const server = https.createServer();
|
||||||
|
|
||||||
|
assert.strictEqual(server.NPNProtocols.compare(dftProtocol.NPNProtocols), 0);
|
||||||
|
assert.strictEqual(server.listeners('request').length, 0);
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user