1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
| var fs = require('fs'); var connect = require('connect'); var http = require('https'); var chalk = require('chalk'); var Promise = require('bluebird'); var open = require('opn'); var net = require('net'); var url = require('url'); var express = require('express');
var httpApp = express();
httpApp.all("*", (req, res, next) => { let host = req.headers.host; host = host.replace(/\:\d+$/, ''); res.redirect(307, `https://${host}${req.path}`); });
httpApp.listen(80, function() { console.log('http on 80 Welcome to Smileyan.cn'); });
const options = { key: fs.readFileSync("./********.key"), cert: fs.readFileSync("./********.pem") }
module.exports = function(args) { var app = connect(); var config = this.config; var ip = args.i || args.ip || config.server.ip || undefined; var port = parseInt(args.p || args.port || config.server.port || process.env.port, 10) || 4000; var root = config.root; var self = this;
return checkPort(ip, port).then(function() { return self.extend.filter.exec('server_middleware', app, { context: self }); }).then(function() { if (args.s || args.static) { return self.load(); }
return self.watch(); }).then(function() { return startServer(http.createServer(options, app), 4000, ip); }).then(function(server) { var addr = server.address(); var addrString = formatAddress(ip || addr.address, addr.port, root);
self.log.info('Hexo is running at %s . Press Ctrl+C to stop.', chalk.underline(addrString)); self.emit('server');
if (args.o || args.open) { open(addrString); }
return server; }).catch(function(err) { switch (err.code) { case 'EADDRINUSE': self.log.fatal('Port %d has been used. Try other port instead.', port); break;
case 'EACCES': self.log.fatal('Permission denied. You can\'t use port ' + port + '.'); break; }
self.unwatch(); throw err; }); };
function startServer(server, port, ip) { return new Promise(function(resolve, reject) { server.listen(port, ip, function() { resolve(server); });
server.on('error', reject); }); }
function checkPort(ip, port) { return new Promise(function(resolve, reject) { if (port > 65535 || port < 1) { return reject(new Error('Port number ' + port + ' is invalid. Try a number between 1 and 65535.')); }
var server = net.createServer();
server.once('error', reject);
server.once('listening', function() { server.close(); resolve(); });
server.listen(port, ip); }); }
function formatAddress(ip, port, root) { var hostname = ip; if (ip === '0.0.0.0' || ip === '::') { hostname = 'localhost'; }
return url.format({ protocol: 'http', hostname: hostname, port: port, path: root }); }
|