ember-cli
Version:
Command line tool for developing ambitious ember.js apps
63 lines (53 loc) • 1.75 kB
JavaScript
'use strict';
var Promise = require('../../ext/promise');
var Task = require('../../models/task');
var SilentError = require('../../errors/silent');
module.exports = Task.extend({
init: function() {
this.http = this.http || require('http');
},
setupHttpServer: function() {
this.httpServer = this.http.createServer(this.app);
},
listen: function(port, host) {
var server = this.httpServer;
return new Promise(function(resolve, reject) {
server.listen(port, host);
server.on('listening', resolve);
server.on('error', reject);
});
},
processAddonMiddlewares: function(options) {
this.project.initializeAddons();
this.project.addons.forEach(function(addon) {
if (addon.serverMiddleware) {
addon.serverMiddleware({
app: this.app,
options: options
});
}
}, this);
},
processAppMiddlewares: function(options) {
if (this.project.has('./server')) {
this.project.require('./server')(this.app, options);
}
},
start: function(options) {
var ui = this.ui;
this.app = require('express')();
options.environment = this.environment;
options.watcher = this.watcher;
options.ui = this.ui;
this.processAddonMiddlewares(options);
this.processAppMiddlewares(options);
this.setupHttpServer();
return this.listen(options.port, options.host)
.then(function() {
ui.writeLine('Serving on http://' + options.host + ':' + options.port);
})
.catch(function() {
throw new SilentError('Could not serve on http://' + options.host + ':' + options.port + '. It is either in use or you do not have permission.');
});
}
});