SPRINT 10 . Роутинг на Node.js

Материалы

Текст

Роутинг на Node.js

Сегодня мы будем создавать роутинг на чистой node.js без использования express. Давайте обрисуем задачу - создать сервер на node.js, который будет реагировать на GET и POST запросы и отвечать на них.

Для реализации подключим модули url, http.

const http = require('http');
const url = require('url');

Для понимания адреса, который приходит в запросе, нам нужно сделать парсинг req.url.


http.createServer(function (req, res) {
    let urlParts = url.parse(req.url);
    console.log(urlParts.pathname);
}).listen(3000);

Теперь зная urlParts.pathname мы можем выполнять любые действия на сервере. Давайте добавил внутрь сервера switch, который и будет реализовывать роутинг:


switch (urlParts.pathname) {
    case "/":
        homepage(req, res);
        break;
    case "/about":
        about(req, res);
        break;
    default:
        page404(req,res);
        break;
}

Где homepage, about, page404 - это функции, которые будут реагировать на данные адреса.

function homepage(req, res) {
    res.end("homepage");
}
function about(req, res) {
    res.end("about");
}
function page404(req, res) {
    res.end("404");
}

Добавим в роутен на нативной node.js возможность реагировать на тип запроса - GET, POST, а на другие запросы отвечать 404. Весь код приложения выглядит так:


const http = require('http');
const url = require('url');

http.createServer(function (req, res) {
    let urlParts = url.parse(req.url);
    // console.log(urlParts);
    console.log('==========================');
    console.log(urlParts.pathname);
    console.log('==========================');
    if (req.method == 'GET') {
        switch (urlParts.pathname) {
            case "/":
                homepage(req, res);
                break;
            case "/about":
                about(req, res);
                break;
            default:
                page404(req,res);
                break;
        }
    }
    else if (req.method == 'POST') {
        switch (urlParts.pathname) {
            case "/about":
                about2(req, res);
                break;
            default:
                page404(req,res);
                break;
        }
    }
    else {
        page404(req,res);
    }

}).listen(3000);
console.log("Server running at http://localhost:3000/");

function homepage(req, res) {
    res.end("homepage");
}
function about(req, res) {
    res.end("about");
}
function about2(req, res) {
    res.end("about post");
}
function page404(req, res) {
    res.end("404");
}

Подведем итог, мы написали роутер на node.js, теперь наше приложение может реагировать на типы запроса и введенные адреса - т.е. скелет полноценного сервера под сайт получили. Теперь можно добавить вычитку данных на страницах из базы, и сайт готов. Данные действия будем проводить в следующем юните, а пока - внизу вас ждут Домашние задания.

TASKS

task 1

Создайте сервер на порту 3000. Сервер должен принимать GET запросы.

task 2

Сервер должен реагировать на запрос /main - возвращая строку 'main'. Обработкой данного запроса занимается функция main.

task 3

Сервер должен реагировать на запрос /about - возвращая строку 'about'. Обработкой данного запроса занимается функция about.

task 4
Материалы юнита доступны после покупки курса
task 5
Материалы юнита доступны после покупки курса