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 похожих вопроса, которые могут вам сильно помочь в этом: