Node.JS как лучше организовать экспорт асинхронной ф-ции из модуля?(coffeescript)

Доброго времни суток!

Уселся писать генератор проектов на node.js, express, coffee и тд. Их существует великое множество, но везде что-то не нравится, либо роутинг неудобный, либо конфиги не задать файлами, вообщем все не то. Хочу чтобы в корневом app.coffee можно было инициировать запуск express сервера с каллбэком. Долго думал как это по-русски описать лучше — не придумал, попробую на примерах объяснить:

В app.coffee подключается следующий модуль
engine = require './app/engine'


Внутри него в свою очередь происходит следующее:
express = require 'express'
http = require 'http'
app = express()

###
# Много страшной настройки express
###

# Вот тут все коряво, надо как-то исправлять
module.exports = 
	app: app
	start: (done) ->
		http.createServer(app).listen app.get('port'), -> done true    # WTF: неужели нет другого способа?


Монструозный экспорт, приведенный выше, позволяет в app.coffee написать следующее:
engine.start -> print "Awesome server listening on port " + engine.app.get('port')


Т.е. очень хочется иметь возможность написать в консоли, что сервер успешно запустился, причем писать это из app.coffee.

Возможно ли реализовать это как-нибудь поэлегантнее? Тапками не кидать в coffee далеко не спец) Заранее спасибо!
  • Вопрос задан
  • 3630 просмотров
Пригласить эксперта
Ответы на вопрос 1
lastwish
@lastwish
А зачем http? И в чём именно «неэлегантность»?

Я бы улучшил так:
1) Убрал http;
2) Убрал отдельный метод для возвращения app;
3) Не выковыривал бы конфиги (в данном случае — порт) из app внутри модуля, а хранил бы там отдельно

engine.coffee:
express = require 'express'

app = express()
port = process.env.PORT or 5000

exports = module.exports = (callback) ->
  app.listen port, callback


app.coffee:
engine = require './engine'

app = engine -> 
  console.log "listening on " + app.address().port
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы