Node.js: конфигурация и маршруты в другом файле

Я запускаю новое приложение Node.js и на этот раз я пытаюсь правильно организовать код, вместо того чтобы все было в одном файле.

У меня есть только простая настройка в server.coffee:

express = require 'express'
app = module.exports = express.createServer()

## CONFIGURATION ##

app.configure () ->
 app.set 'views', __dirname + '/views'
 app.set 'view engine', 'jade'
 app.use express.bodyParser()
 app.use express.logger('dev')
 app.use express.profiler()
 app.use express.methodOverride()
 app.use app.router
 app.use express.static(__dirname + '/public')

app.configure 'development', () ->
 app.use express.errorHandler({dumpExceptions: true, showStack: true})

app.configure 'production', () ->
 app.use express.errorHandler()

app.get '/', (req,res) ->
  res.render 'index'
    title: 'Express'

## SERVER ##
port = process.env.PORT || 3000 

app.listen port, () ->
  console.log "Listening on port" + port

У меня есть несколько вопросов относительно этого простого кода, и я знаю, что все ответы зависят от разработчика, но я действительно хочу сделать это правильно:

  • Если server.js файл имеет больше, чем app.listen? Что именно там должно быть?
  • Разве все конфигурации не должны находиться в файле, отличном от маршрутов? Как я могу удалить app.get в другой файл и заставить их работать, когда я запускаю server.coffee?
  • Что именно должно содержать index.coffee что я вижу во многих приложениях, таких как Hubot?

Я надеюсь, что кто-то может дать мне ответ, кроме "это зависит".

3 ответа

Вы можете использовать require, и просто передать app var в качестве параметра для метода. Это не самый красивый синтаксис и не в CoffeeScript, но вы должны понять.

routes.js

module.exports = function (app) {
    // set up the routes themselves
    app.get("/", function (req, res) {
        // do stuff
    });
};

app.js

require("./routes")(app);

Если вы хотите сделать еще один шаг вперед, я разделю свои маршруты на более мелкие группы и в отдельной подпапке. (лайк: routes/auth.js для входа / выхода, routes/main.js для дома / о / контакт / и тд)

маршруты / index.js

// export a function that accepts `app` as a param
module.exports = function (app) {
    require("./main")(app);
    // add new lines for each other module, or use an array with a forEach
};

(переименовать routes.js до того как routes/main.jsсам источник остается прежним)

Express 4 упрощает это с express.Router учебный класс.

Другая функция, помогающая организовать маршруты, - это новый класс, express.Router, что вы можете использовать для создания модульных монтируемых обработчиков маршрутов. Router экземпляр является полноценным промежуточным ПО и системой маршрутизации; по этой причине его часто называют "мини-приложением".

В следующем примере создается маршрутизатор как модуль, загружается в него промежуточное программное обеспечение, определяются некоторые маршруты и монтируется его по пути в главном приложении.

Создайте файл роутера с именем birds.js в каталоге приложения со следующим содержимым:

var express = require('express');
var router = express.Router();

// middleware specific to this router
router.use(function timeLog(req, res, next) {
  console.log('Time: ', Date.now());
  next();
});

// define the home page route
router.get('/', function(req, res) {
  res.send('Birds home page');
});

// define the about route
router.get('/about', function(req, res) {
  res.send('About birds');
});

module.exports = router;

Затем загрузите модуль роутера в приложение:

var birds = require('./birds');
app.use('/birds', birds);

Приложение теперь сможет обрабатывать запросы /birds а также /birds/aboutнаряду с вызовом timeLog промежуточное программное обеспечение, специфичное для маршрута.

Есть 2 похожих вопроса, которые могут вам сильно помочь в этом:

Как структурировать приложение express.js?

Структура приложения Nodejs/Expressjs

Другие вопросы по тегам