Node.js: конфигурация и маршруты в другом файле - PullRequest
16 голосов
/ 09 декабря 2011

Я запускаю новое приложение 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 ]

35 голосов
/ 09 декабря 2011

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

rout.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 для дома / о / контакт и т. д.)

routs / 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, сам источник остается прежним)

7 голосов
/ 06 октября 2015

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 голосов
/ 09 декабря 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...