Система маршрутизации в Node.js

в 10:36, , рубрики: connect, ejs, express, node.js, маршрутизация, метки: , , , ,

Предисловие

Не так давно начал изучать Node.js. В поисках хорошей статьи «how to» наткнулся на много полезных статей, но не про маршрутизацию. Поэтому «погуглив» на различных «забугорных» ресурсах, нашёл интересные способы маршрутизации и построения своей системы ЧПУ, с которыми готов поделится с вами.

Веб-каркасы для Node.js

Существует множество каркасов для создания Веб-приложений на Node.js, мы остановимся на Connect(смотреть на гихабе) и Express

Подробнее о Connect

В описании системы говорится, что это не каркас для разработки веб-приложений, а каркас промежуточного уровня платформы Node.js. В его состав входят «11 готовых средств», и существует «богатый выбор сторонних средств промежуточного уровня». Всё это дело собирается при помощи систему ПУ-модуля. Cnnect берёт на себя многие функции «полного веб-сервера», позволяя вам сосредоточится на логике приложения.

Итак начнём, для начала установим Connect:

$ npm install connect

Затем создаём свой файл сервера, назовём его server.js

var connect = require('connect');
var htutil = require('./htutil');

connect.createServer()
   .use(connect.favicon())
   .use(connect.logger())
   .use('/filez', connect.static(__dirname + '/filez'))
   .use(connect.router(function(app) {
      app.get('/',
          require('./home-node').get);
      app.get('/users',
         require('./users-node').get);
      
   })).listen(8124);

console.log('listening to http://localhost:8124');

В данном случае мы подключили ПУ-модули favicon, logger, static, router.

  • Logger реализует систему сохранения запросов как веб-сервер Apache.
  • Static реализует «статический веб-сервер», который отправляет файлы, находящиеся в указанном каталоге. это означает что если имеются каталоги для хранения файлов с расширениями .html,.css, или .js, то отправку их браузеру можно поручить ПУ-модули connect.static.
  • Favicon это от значок сайта, для него сделан целый ПУ-модуль.
  • Router передаёт запрос к определённому URI-адресу обработчику. Настройка этого модуля очень проста.

.use(connect.router(function(app) {
       app.requestName('path', function(req,res,next) {  });
       app.get('/form',createPageWothForm);  
       app.post('/form',receiveValuesPostedWithForm);
   })

Вот так просто можно разграничить приём и обработку данных в формате GET, POST. А потом ответ вернуть например в формате json.

Подробнее о Express

Express — это веб-каркас построенный на базе каркаса промежуточного уровня Connect. Это означает что Expres как раз таки заточен под создание веб-приложения, в том числе представление системы шаблонов, в отличии от Connect который заботиться только о функциях Веб-сервера. Exprss и Connect разрабатывали одни и теже люди поэтому API приложений зеркальны.

Начинаем с установки, прихватим с собой систему шаблонов:

$ npm install express ejs

Затем создаём свой файл сервера, назовём его server.js

var express = require('express');
var app = express.createServer( express.logger());

app.register('.html',require('ejs'));
//необязательно так как Express по умолчанию ищет шаблоны в каталоге views

app.set('views',__dirname + '/views');
app.set('view engine','ejs');//Ставим движок шаблонов

app.configure(function(){
	app.use(app.router);
    app.use(express.static(__dirname + '/filez'));
    app.use(express.errorHandler({
    	dumpExceptions:true, showStack:true
    }));
});

Здесь мы настоили сервер и сконфигурировали необходимые ПУ-модули.
Теперь настроим марштрутизатор продолжаем писать в seerver.js


app.get('/', function(req, res) {
	res.render('home.html', { title: "Welcome! This is my Home page"});//Отправляем страницу
});

app.get('/404',function(req,res) {
	res.send('Not Found' + req.url);
});

app.listen(8124)
console.log('listening to http://localhost:8124')

Для того чтобы не было вопросов а как сделать шаблон вот пример home.html

<html>
	<head>
    	<title><%= title %=></title>
    </head>
    <body>
    </body>
</html>

Как же сделать параметризованные url?

	app.get('/user/:id',function(req,res) {
    	res.send('user ' + req.params.id);
    });
    app.get('/cat/:id/:name',function(req,res) {
    	res.send('catid ' + req.params.id + 'catname ' + req.params.name);
    });

Заключение

Как видите использование готовых модулей облегчает и ускоряет разработку в разы. Создание маршрутизации это целое искусство, можно сделать 100 сайтов и в каждом будет свой способ.

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

Также очень интересны будут способы создания маршрутизации в ваших веб-приложениях.

Спасибо за внимание!

Автор: Mike_Bazhenov

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js