Skip to content

Commit a05480e

Browse files
committed
feat(server): 使用 https 选项同时可以开启正常 http server
1 parent 57fd410 commit a05480e

File tree

2 files changed

+44
-56
lines changed

2 files changed

+44
-56
lines changed

lib/commands/server.js

Lines changed: 21 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
44

55
var connect = require('connect'),
66
fs = require('fs'),
7-
os = require('os'),
87
http = require('http'),
98
https = require('https'),
109
serveStatic = require('serve-static'),
@@ -24,13 +23,13 @@ exports.setOptions = function (optimist) {
2423
optimist.alias('p', 'port');
2524
optimist.describe('p', '端口');
2625
optimist.alias('x', 'proxy');
27-
optimist.describe('x', '启用proxy代理服务');
26+
optimist.describe('x', '开启 proxy 代理服务');
2827
optimist.alias('m', 'middlewares');
2928
optimist.describe('m', '加载项目中间件');
3029
optimist.alias('a', 'all');
31-
optimist.describe('a', '整体编译');
30+
optimist.describe('a', '使用整体编译模式');
3231
optimist.alias('s', 'https');
33-
optimist.describe('s', '使用https协议');
32+
optimist.describe('s', '开启 https 服务');
3433
};
3534

3635
exports.run = function (options) {
@@ -373,37 +372,31 @@ exports.run = function (options) {
373372

374373
app.use(serveIndex(cwd));
375374

376-
var server = void 0;
375+
var servers = [];
377376

378-
if (!isHttps) {
379-
server = http.createServer(app);
380-
} else {
377+
servers.push(extend(http.createServer(app), { _port: port }));
378+
if (isHttps) {
381379
var httpsOpts = {
382380
key: fs.readFileSync(sysPath.join(__dirname, '../config/https/server.key')),
383381
cert: fs.readFileSync(sysPath.join(__dirname, '../config/https/server.crt'))
384382
};
385-
server = https.createServer(httpsOpts, app);
383+
servers.push(extend(https.createServer(httpsOpts, app), { _port: '443', _isHttps: true }));
386384
}
387385

388-
server.on('error', function (e) {
389-
if (e.code === 'EACCES') {
390-
warn('权限不足, 请使用sudo/管理员模式执行');
391-
} else if (e.code === 'EADDRINUSE') {
392-
warn('端口 ' + port + ' 已经被占用, 请关闭占用该端口的程序或者使用其它端口.');
393-
}
394-
process.exit(1);
395-
});
396-
server.listen(port, function () {
397-
log('Starting up server, serving at: ' + options.cwd);
398-
399-
var networkInterfaces = os.networkInterfaces();
400-
var protocol = options.https ? 'https://' : 'http://';
401-
Object.keys(networkInterfaces).forEach(function (dev) {
402-
networkInterfaces[dev].forEach(function (details) {
403-
if (details.family === 'IPv4' && details.address.indexOf('127.0.0.1') > -1) {
404-
log('Available on: ' + (protocol + details.address + ':' + port).underline);
405-
}
406-
});
386+
servers.forEach(function (server) {
387+
server.on('error', function (e) {
388+
if (e.code === 'EACCES') {
389+
warn('权限不足, 请使用sudo/管理员模式执行');
390+
} else if (e.code === 'EADDRINUSE') {
391+
warn('端口 ' + server._port + ' 已经被占用, 请关闭占用该端口的程序或者使用其它端口.');
392+
}
393+
process.exit(1);
394+
});
395+
server.listen(server._port, function () {
396+
var serverUrl = (server._isHttps ? 'https' : 'http') + '://127.0.0.1:' + server._port;
397+
398+
!server._isHttps && log('Starting up server, serving at: ' + options.cwd);
399+
log('Available on: ' + serverUrl.underline);
407400
});
408401
});
409402

src/commands/server.js

Lines changed: 23 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
let connect = require('connect'),
44
fs = require('fs'),
5-
os = require('os'),
65
http = require('http'),
76
https = require('https'),
87
serveStatic = require('serve-static'),
@@ -22,13 +21,13 @@ exports.setOptions = (optimist) => {
2221
optimist.alias('p', 'port');
2322
optimist.describe('p', '端口');
2423
optimist.alias('x', 'proxy');
25-
optimist.describe('x', '启用proxy代理服务');
24+
optimist.describe('x', '开启 proxy 代理服务');
2625
optimist.alias('m', 'middlewares');
2726
optimist.describe('m', '加载项目中间件');
2827
optimist.alias('a', 'all');
29-
optimist.describe('a', '整体编译');
28+
optimist.describe('a', '使用整体编译模式');
3029
optimist.alias('s', 'https');
31-
optimist.describe('s', '使用https协议');
30+
optimist.describe('s', '开启 https 服务');
3231
};
3332

3433
exports.run = (options) => {
@@ -355,37 +354,33 @@ exports.run = (options) => {
355354

356355
app.use(serveIndex(cwd));
357356

358-
let server;
357+
let servers = [];
359358

360-
if (!isHttps) {
361-
server = http.createServer(app);
362-
} else {
359+
servers.push(extend(http.createServer(app), {_port: port}));
360+
if (isHttps) {
363361
const httpsOpts = {
364362
key: fs.readFileSync(sysPath.join(__dirname, '../config/https/server.key')),
365363
cert: fs.readFileSync(sysPath.join(__dirname, '../config/https/server.crt'))
366364
};
367-
server = https.createServer(httpsOpts, app);
365+
servers.push(extend(https.createServer(httpsOpts, app), {_port: '443', _isHttps: true}));
368366
}
369367

370-
server.on('error', (e) => {
371-
if (e.code === 'EACCES') {
372-
warn('权限不足, 请使用sudo/管理员模式执行');
373-
} else if (e.code === 'EADDRINUSE') {
374-
warn('端口 ' + port + ' 已经被占用, 请关闭占用该端口的程序或者使用其它端口.');
375-
}
376-
process.exit(1);
377-
});
378-
server.listen(port, () => {
379-
log('Starting up server, serving at: ' + options.cwd);
380-
381-
let networkInterfaces = os.networkInterfaces();
382-
let protocol = options.https ? 'https://' : 'http://';
383-
Object.keys(networkInterfaces).forEach(function (dev) {
384-
networkInterfaces[dev].forEach(function (details) {
385-
if (details.family === 'IPv4' && details.address.indexOf('127.0.0.1') > -1) {
386-
log('Available on: ' + (protocol + details.address + ':' + port).underline);
387-
}
388-
});
368+
servers.forEach((server) => {
369+
server.on('error', (e) => {
370+
if (e.code === 'EACCES') {
371+
warn('权限不足, 请使用sudo/管理员模式执行');
372+
} else if (e.code === 'EADDRINUSE') {
373+
warn('端口 ' + server._port + ' 已经被占用, 请关闭占用该端口的程序或者使用其它端口.');
374+
}
375+
process.exit(1);
376+
});
377+
server.listen(server._port, () => {
378+
const serverUrl = (server._isHttps ? 'https' : 'http')
379+
+ '://127.0.0.1:'
380+
+ server._port;
381+
382+
!server._isHttps && log('Starting up server, serving at: ' + options.cwd);
383+
log('Available on: ' + serverUrl.underline);
389384
});
390385
});
391386

0 commit comments

Comments
 (0)