hexo-server
Version:
Server module of Hexo.
45 lines (38 loc) • 1.33 kB
JavaScript
var connect = require('connect');
var http = require('http');
var Promise = require('bluebird');
var chalk = require('chalk');
function server(args){
var app = connect();
var config = this.config;
var ip = args.i || args.ip || config.server.ip || 'localhost';
var port = parseInt(args.p || args.port || config.server.port, 10) || 4000;
var root = config.root;
var self = this;
if (port > 65535 || port < 1){
throw new Error('Port number ' + port + ' is invalid. Try a number between 1 and 65535.');
}
return Promise.all([
// Load middlewares
this.extend.filter.exec('server_middleware', app, {context: this}),
// Load source files
this.post.load({watch: true})
]).then(function(){
var server = http.createServer(app).listen(port, ip, function(){
self.log.info('Hexo is running at ' + chalk.underline('http://%s:%d%s') + '. Press Ctrl+C to stop.', ip, port, root);
self.emit('server');
});
server.on('error', 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;
}
throw err;
});
});
}
module.exports = server;