Организуйте маршруты в узле.js
Я начинаю смотреть на узел.js. Также я использую Экспресс.
И у меня есть вопрос - как я могу организовать маршруты веб-приложений? Все примеры просто поставить все это app.get/post/put()
обработчики в приложение.JS и он работает просто отлично. Это хорошо, но если у меня есть что-то большее, чем простой блог HW? Можно ли сделать что-то вроде этого:
var app = express.createServer();
app.get( '/module-a/*', require('./module-a').urls );
app.get( '/module-b/*', require('./module-b').urls );
и
// file: module-a.js
urls.get('/:id', function(req, res){...}); // <- assuming this is handler for /module-a/1
другими словами-Я хотел бы что-то вроде URLConf Django, но в узле.js.
6 ответов:
Проверьте примеры здесь:
https://github.com/visionmedia/express/tree/master/examples
' mvc 'и' route-separation ' могут быть полезны.
Я нашел короткий пример Разбив Узел.js: JavaScript везде что мне очень понравилось.
определение
module-a
иmodule-b
как свои собственные экспресс-приложения, вы можете установить их в основное приложение, как вам нравится с помощью connects приложение.используйте ():module-a.js
module.exports = function(){ var express = require('express'); var app = express(); app.get('/:id', function(req, res){...}); return app; }();
module-b.js
module.exports = function(){ var express = require('express'); var app = express(); app.get('/:id', function(req, res){...}); return app; }();
приложение.js
var express = require('express'), app = express(); app.configure(..); app.get('/', ....) app.use('/module-a', require('./module-a')); app.use('/where/ever', require('./module-b')); app.listen(3000);
этот дал бы вам маршруты
localhost:3000/ localhost:3000/module-a/:id localhost:3000/where/ever/:id
также есть скринкаст @tjholowaychuk (создатель express), где он использует описанный метод @Vegar.
доступно на Vimeo:модульные веб-приложения с узлом.js и Экспресс
проверить статьи о the экспресс-routescan модуль. Этот модуль помогает организовать ремонтопригодную маршрутизацию для экспресс-приложений. Ты можешь попробовать. Это лучшее решение для меня.
еще одна альтернатива;
приложение.js
.jsvar express = require('express') , routes = require('./routes') , user = require('./routes/user') , http = require('http') , path = require('path'); var app = express(); // all environments app.set('port', process.env.PORT || 3000); app.get('/', routes.index); app.get('/users/:id', user.getUser); http.createServer(app).listen(app.get('port'), function(){ console.log('Express server listening on port ' + app.get('port')); });
exports.index = function(req, res){ res.render('index', { title: 'Express' }); };
пользователей.js
exports.getUser = function(req, res){ //your code to get user };
есть несколько способов сделать:
1:
module1(app.route('/route1')); module2(app.route('/route2'));
в модулях вы можете просто реализовать 1 функцию для обработки методов http:
module.exports = function(route) { route .get(function(req, res, next) { ... }). .post(function(req, res, next) { ... }); }
2: Если вы хотите обрабатывать маршрут с помощью суб-приложения вместо модуля / промежуточного программного обеспечения:
var m1 = require(module1.js); var m2 = require(module2.js); app.use('/route1', r1); app.use('/route2', r2);