Express.js asoslari


ULASHISH

Express.js nima?

Express.js (yoki shunchaki Express) veb-ilovalar va API’lar yaratish uchun mo‘ljallangan eng mashhur Node.js veb-ilova freymvorkidir.

Bu odatda Node.js uchun de-fakto standart server frameworki deb ataladi.

Asosiy xususiyatlar:

  • Minimal va moslashuvchan
  • Qat’iy qoidalar o‘rnatmaydi (ilovangiz tuzilmasini o‘zingiz belgilaysiz)
  • Yengil va tez
  • O‘rta dastur orqali kengaytiriladi
  • Plaginlar va kengaytmalarning ulkan ekotizimlari

Nima uchun Express.js ni tanlash kerak?

Express Node.js xususiyatlarini yashirmasdan asosiy veb-ilova xususiyatlarining nozik qatlamini taqdim etadi.

U taklif qiladi:

  • Kuchli marshrutlash tizimi
  • HTTP helpers (redirection, caching, etc.)
  • HTTP so‘rovlariga javob berish uchun o‘rta dasturni qo‘llab-quvvatlash
  • Dinamik HTML renderlash uchun shablon mexanizmi
  • O‘rta dasturni qayta ishlashda xato

Express bilan ishlashni boshlash

Express har qanday Node.js loyihasiga qo‘shilishi mumkin. Yangi Express ilovasini qanday ishga tushirish haqida.

Old shartlar

Boshlashdan oldin, sizda borligiga ishonch hosil qiling:

  • O‘rnatilgan Node.js (v14.0.0 yoki undan keyingi versiya tavsiya etiladi)
  • npm (Node.js bilan birga keladi) yoki yarn
  • Kod muharriri (VS Code, WebStorm va boshqalar)

Expressni o‘rnatish

Node.js ilovangizda Express-dan foydalanish uchun avval uni o‘rnatishingiz kerak:

npm install express

Expressni o‘rnatish va uni package.json bog‘liqliklarida saqlash uchun:

npm install express --save


Salom Dunyo misoli

Express yordamida oddiy “Salom dunyo” ilovasini yaratamiz.

Ushbu misol Express ilovasining asosiy tuzilishini ko‘rsatadi.

Asosiy komponentlar:

  • Ekspress modulni import qilish
  • Ekspres dastur namunasini yaratish
  • Yo‘nalishlarni belgilash
  • Server ishga tushirilmoqda
const express = require('express');
const app = express();
const port = 8080;

// Define a route for GET requests to the root URL
app.get('/', (req, res) => {
  res.send('Hello World from Express!');
});

// Start the server
app.listen(port, () => {
  console.log(`Example app listening at http://localhost:${port}`);
});
Misolni ishga tushirish »

Ushbu kodni app.js nomli faylga saqlang va uni Node.js bilan ishga tushiring:

node app.js

Keyin brauzeringizni oching va "Salom dunyo" xabarini ko‘rish uchun http://localhost:8080 ga o‘ting.


Asosiy marshrutlash

Marshrutlash (routing) ilovaning turli HTTP metodlari (GET, POST, PUT, DELETE va boshqalar) orqali muayyan endpoint’larga (URI’larga) yuborilgan mijoz so‘rovlariga qanday javob berishini bildiradi.

Express HTTP usullariga mos keladigan marshrutlarni aniqlashning oddiy usullarini taqdim etadi:

  • app.get() - GET so‘rovlarini boshqarish
  • app.post() - POST so‘rovlarini boshqarish
  • app.put() - PUT so‘rovlarini boshqarish
  • app.delete() - O‘CHIRISH so‘rovlarini boshqarish
  • app.all() - Barcha HTTP usullari bilan ishlash
const express = require('express');
const app = express();
const port = 8080;

// Respond to GET request on the root route
app.get('/', (req, res) => {
  res.send('GET request to the homepage');
});

// Respond to POST request on the root route
app.post('/', (req, res) => {
  res.send('POST request to the homepage');
});

// Respond to GET request on the /about route
app.get('/about', (req, res) => {
  res.send('About page');
});

// Catch all other routes
app.all('*', (req, res) => {
  res.status(404).send('404 - Page not found');
});

// Start the server
app.listen(port, () => {
  console.log(`Example app listening at http://localhost:${port}`);
});
Misolni ishga tushirish »

Yo‘nalish parametrlari

Marshrut parametrlari URL-ning muayyan pozitsiyalarida qiymatlarni ushlaydigan URL segmentlari deb ataladi.

Ular yo‘lda ikki nuqta : prefiksi bilan ko‘rsatilgan.

Misol: /users/:userId/books/:bookId

Bu misolda userId va bookId marshrut parametrlari bo‘lib, ularga req.params orqali kirish mumkin.

const express = require('express');
const app = express();
const port = 8080;

// Route with parameters
app.get('/users/:userId/books/:bookId', (req, res) => {
  // Access parameters using req.params
  res.send(`User ID: ${req.params.userId}, Book ID: ${req.params.bookId}`);
});

app.listen(port, () => {
  console.log(`Example app listening at http://localhost:${port}`);
});
Misolni ishga tushirish »

So‘rov parametrlari

So‘rov parametrlari URL manzilidagi ? dan keyin paydo bo‘ladigan kalit-qiymat juftliklaridir.

Ular Express tomonidan avtomatik ravishda tahlil qilinadi va req.query da mavjud.

Misol URL: http://example.com/search?q=express&page=2

Ushbu URL manzilida q=express va page=2 so‘rov parametrlari bo‘lib, ularga req.query.q va req.query.page sifatida kirish mumkin.

const express = require('express');
const app = express();
const port = 8080;

// Route handling query parameters
app.get('/search', (req, res) => {
  // Access query parameters using req.query
  const { q, category } = req.query;
  res.send(`Search query: ${q}, Category: ${category || 'none'}`);
});

app.listen(port, () => {
  console.log(`Example app listening at http://localhost:${port}`);
});
Misolni ishga tushirish »

Ushbu marshrutga quyidagi URL manzil orqali kiring: http://localhost:8080/search?q=express&category=framework


Ekspressda o‘rta dastur

O‘rta dastur funksiyalari Express ilovalarining asosidir.

Ular quyidagi imkoniyatlarga ega:

  • The request object (req)
  • The response object (res)
  • Stekdagi navbatdagi middleware funksiyasi (next)

O‘rta dastur:

  • Har qanday kodni bajaring
  • So‘rov va javob obyektlarini o‘zgartirish
  • So‘rov-javob aylanishini tugatish
  • Stackdagi keyingi o‘rta dasturni chaqiring

O‘rnatilgan o‘rta dastur

Express bir nechta foydali vosita funksiyalarini o‘z ichiga oladi:

  • express.json() - JSON so‘rovi organlarini tahlil qilish
  • express.urlencoded() - URL-kodlangan so‘rov organlarini tahlil qilish
  • express.static() - Statik fayllarga xizmat ko‘rsatish
  • express.Router() - modulli marshrut ishlovchilarni yaratish
const express = require('express');
const app = express();
const port = 8080;

// Middleware to parse JSON request bodies
app.use(express.json());

// Middleware to parse URL-encoded request bodies
app.use(express.urlencoded({ extended: true }));

// Middleware to serve static files from a directory
app.use(express.static('public'));


// POST route that uses JSON middleware
app.post('/api/users', (req, res) => {
  // req.body contains the parsed JSON data
  console.log(req.body);
  res.status(201).json({ message: 'User created', user: req.body });
});

app.listen(port, () => {
  console.log(`Example app listening at http://localhost:${port}`);
});
Misolni ishga tushirish »

Ekspressda xato bilan ishlash

Ekspress-da xatolarni qayta ishlash to‘rtta argumentga ega bo‘lgan maxsus vosita funksiyalari orqali amalga oshiriladi:

(err, req, res, next).

Asosiy fikrlar:

  • Xatolarni qayta ishlash uchun middleware dastur to‘rtta argumentga ega bo‘lishi kerak
  • U boshqa app.use() va marshrut chaqiruvlaridan keyin aniqlanishi kerak
  • Xatolarni qayta ishlash uchun bir nechta o‘rta dastur funksiyalariga ega bo‘lishingiz mumkin
  • Xatolarni keyingi xato ishlov beruvchisiga o‘tkazish uchun next(err) dan foydalaning

Express so‘rovni qayta ishlash jarayonida yuzaga keladigan xatolarni aniqlash uchun standart xato ishlov beruvchisi bilan birga keladi:

const express = require('express');
const app = express();
const port = 8080;

// Route that may throw an error
app.get('/error', (req, res) => {
  // Simulating an error
  throw new Error('Something went wrong!');
});

// Route that uses next(error) for asynchronous code
app.get('/async-error', (req, res, next) => {
  // Simulating an asynchronous operation that fails
  setTimeout(() => {
    try {
      // Something that might fail
      const result = nonExistentFunction(); // This will throw an error
      res.send(result);
    }
    catch (error) {
      next(error); // Pass errors to Express
    }
    }, 100);
});

// Custom error handling middleware
// Must have four parameters to be recognized as an error handler
app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(500).send('Something broke!');
});

app.listen(port, () => {
  console.log(`Example app listening at http://localhost:${port}`);
});
Misolni ishga tushirish »

Statik fayllarga xizmat ko‘rsatish

Ekspress o‘rnatilgan express.static o‘rta dasturidan foydalangan holda tasvirlar, CSS va JavaScript kabi statik fayllarga xizmat ko‘rsatishi mumkin.

Eng yaxshi amaliyotlar:

  • Statik fayllarni alohida katalogga joylashtiring (odatda public yoki static)
  • Marshrutlaringizdan oldin statik middleware dasturni o‘rnating
  • Yaxshiroq ishlash uchun ishlab chiqarishda CDN dan foydalanishni o‘ylab ko‘ring
  • Statik aktivlar uchun tegishli kesh sarlavhalarini o‘rnating

Rasmlar, CSS fayllari va JavaScript fayllari kabi statik fayllarga xizmat ko‘rsatish uchun express.static o‘rnatilgan o‘rta dastur funksiyasidan foydalaning:

const express = require('express');
const path = require('path');
const app = express();
const port = 8080;

// Serve static files from the 'public' directory
app.use(express.static('public'));

// You can also specify a virtual path prefix
app.use('/static', express.static('public'));

// Using absolute path (recommended)
app.use('/assets', express.static(path.join(__dirname, 'public')));

app.get('/', (req, res) => {
  res.send(`
    <h1>Static Files Example</h1>
    <img src="/images/logo.png" alt="Logo">
    <link rel="stylesheet" href="/css/style.css">
    <script src="/js/script.js"></script>
  `);
});

app.listen(port, () => {
  console.log(`Example app listening at http://localhost:${port}`);
});
Misolni ishga tushirish »

Bu sizning skriptingiz bilan bir xil katalogda tasvirlar, CSS va JavaScript fayllari uchun pastki kataloglarga ega public nomli katalogingiz borligini nazarda tutadi.


Alohida fayllarda marshrutlash

Yaxshi tashkil etish uchun Express Router yordamida marshrutlarni alohida fayllarda belgilashingiz mumkin:

routes/users.js

const express = require('express');
const router = express.Router();

// Middleware specific to this router
router.use((req, res, next) => {
  console.log('Users Router Time:', Date.now());
  next();
});

// Define routes
router.get('/', (req, res) => {
  res.send('Users home page');
});

router.get('/:id', (req, res) => {
  res.send(`User profile for ID: ${req.params.id}`);
});

module.exports = router;

routes/products.js

const express = require('express');
const router = express.Router();

// Define routes
router.get('/', (req, res) => {
  res.send('Products list');
});

router.get('/:id', (req, res) => {
  res.send(`Product details for ID: ${req.params.id}`);
});

module.exports = router;

app.js (asosiy fayl)

const express = require('express');
const usersRouter = require('./routes/users');
const productsRouter = require('./routes/products');

const app = express();
const port = 8080;

// Use the routers
app.use('/users', usersRouter);
app.use('/products', productsRouter);

app.get('/', (req, res) => {
  res.send('Main application home page');
});

app.listen(port, () => {
  console.log(`Example app listening at http://localhost:${port}`);
});
Misolni ishga tushirish »

Shablon dvigatellari

Ekspressni dinamik HTML yaratish uchun shablon dvigatellari bilan sozlash mumkin:

const express = require('express');
const app = express();
const port = 8080;

// Set the view engine to EJS
app.set('view engine', 'ejs');

// Set the directory where templates are located
app.set('views', './views');

// Route that renders a template
app.get('/', (req, res) => {
  const data = {
    title: 'Express Template Example',
    message: 'Hello from EJS!',
    items: ['Item 1', 'Item 2', 'Item 3']
  };

  // Renders the views/index.ejs template
  res.render('index', data);
});

app.listen(port, () => {
  console.log(`Example app listening at http://localhost:${port}`);
});

Ushbu misoldan foydalanish uchun siz EJS shablon mexanizmini o‘rnatishingiz kerak bo‘ladi:

npm install ejs

Va views/index.ejs da fayl yarating:

<!DOCTYPE html>
<html>
<head>
  <title><%= title %></title>
</head>
<body>
  <h1><%= title %></h1>
  <p><%= message %></p>

  <h2>Items:</h2>
  <ul>
    <% items.forEach(function(item) { %>
      <li><%= item %></li>
    < % }); %>
  </ul>
</body>
</html>

RESTful API yaratish

Express odatda RESTful API yaratish uchun ishlatiladi. Bu bizning Node.js Express REST API bo‘limimizda yoritilgan.


Ekspress ilovalar generatori

Ekspres ilovalar ishlab chiqaruvchisi tezkor dastur skeletini yaratishga yordam beradigan vositadir.

Asosiy xususiyatlar:

  • Yaxshi tuzilgan dastur yaratadi
  • Rivojlanish muhitini o‘rnatadi
  • Umumiy o‘rta dasturni sozlaydi
  • Xatolarni qayta ishlashni o‘z ichiga oladi
  • Turli shablonli dvigatellarni qo‘llab-quvvatlaydi

Set: npm install -g express-generator

Foydalanish: express --view=pug myapp

Express ilova skeletini tezda yaratish uchun dastur ishlab chiqaruvchi vositani taqdim etadi:

# Install the generator globally
npm install -g express-generator

# Create a new Express application
express --view=ejs myapp

# Navigate to the app directory
cd myapp

# Install dependencies
npm install

# Start the app
npm start

Bu quyidagi katalog tuzilishiga ega ilovani yaratadi:

myapp/
├── app.js
├── bin/
│  └── www
├── package.json
├── public/
│  ├── images/
│  ├── javascripts/
│  └── stylesheets/
│    └── style.css
├── routes/
│  ├── index.js
│  └── users.js
└── views/
  ├── error.ejs
  └── index.ejs

Express.js eng yaxshi amaliyotlari

Kuchli va xizmat ko‘rsatish mumkin bo‘lgan Express ilovalarini yaratish uchun quyidagi eng yaxshi amaliyotlarga amal qiling:

  • Loyiha tuzilmasi: Kodingizni funksiya yoki komponent bo‘yicha tartibga soling
  • Muhit o‘zgaruvchilari: Konfiguratsiya uchun dotenv dan foydalaning
  • Xatolarni qayta ishlash: Xatolarni boshqarishni markazlashtiring
  • Kirish: morgan yoki winston kabi jurnallar kutubxonasidan foydalaning
  • Xavfsizlik: Xavfsizlikning eng yaxshi amaliyotlarini (helmet, so‘rovlar chastotasini cheklash (rate limiting) va h.k.) tatbiq eting.
  • Tasdiqlash: express-validator kabi kutubxonalar yordamida kiritilgan ma’lumotlarni tasdiqlang
  • Test: jest , mocha yoki shunga o‘xshash usullardan foydalanib testlarni yozing

Eng yaxshi ishlab chiqarish amaliyotlari

Ishlab chiqarishga qo‘llashda ushbu qo‘shimcha amaliyotlarni ko‘rib chiqing:

  • NODE_ENV "ishlab chiqarish" ga o‘rnating
  • PM2 yoki Forever kabi jarayon menejeridan foydalaning
  • compression o‘rta dastur bilan siqishni yoqing
  • Nginx kabi teskari proksi-serverdan foydalaning
  • To‘g‘ri ro‘yxatga olish va monitoringni amalga oshiring
  • To‘g‘ri xato kuzatuvini o‘rnating

Xavfsizlik bo‘yicha eng yaxshi amaliyotlar

  • Turli HTTP sarlavhalarini belgilash orqali Express ilovalaringizni himoya qilish uchun helmet modulidan foydalaning
  • Konfiguratsiya uchun muhit o‘zgaruvchilaridan foydalaning
  • Xatolarni to‘g‘ri boshqarishni amalga oshiring
  • Ishlab chiqarishda HTTPS dan foydalaning
  • Inyeksion hujumlarning oldini olish uchun foydalanuvchi ma’lumotlarini tasdiqlang
  • Tegishli CORS siyosatlarini o‘rnating
const express = require('express');
const helmet = require('helmet');
const cors = require('cors');
const app = express();

// Security middleware
app.use(helmet());

// CORS configuration
app.use(cors({
  origin: 'https://example.com',
  methods: ['GET', 'POST'],
  allowedHeaders: ['Content-Type', 'Authorization']
}));

// Other middleware and routes
// ...

Ishlashning eng yaxshi amaliyotlari

  • Javoblarni siqish uchun siqishni o‘rta dasturidan foydalaning
  • To‘g‘ri keshlash strategiyalarini amalga oshiring
  • Express ilovangiz oldida reverse proxy (masalan, Nginx) ishlatishni ko‘rib chiqing
  • Ko‘p yadroli tizimlardan foydalanish uchun klasterlashdan foydalaning
  • Ma’lumotlar bazasi so‘rovlarini optimallashtirish


W3Schools Pathfinder

Yutuqlaringizni kuzating – bu bepul!