Express.js asoslari
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 boshqarishapp.post()- POST so‘rovlarini boshqarishapp.put()- PUT so‘rovlarini boshqarishapp.delete()- O‘CHIRISH so‘rovlarini boshqarishapp.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 qilishexpress.urlencoded()- URL-kodlangan so‘rov organlarini tahlil qilishexpress.static()- Statik fayllarga xizmat ko‘rsatishexpress.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
publicyokistatic) - 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
dotenvdan foydalaning - Xatolarni qayta ishlash: Xatolarni boshqarishni markazlashtiring
- Kirish:
morganyokiwinstonkabi jurnallar kutubxonasidan foydalaning - Xavfsizlik: Xavfsizlikning eng yaxshi amaliyotlarini (
helmet, so‘rovlar chastotasini cheklash (rate limiting) va h.k.) tatbiq eting. - Tasdiqlash:
express-validatorkabi kutubxonalar yordamida kiritilgan ma’lumotlarni tasdiqlang - Test:
jest,mochayoki 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
compressiono‘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!
