Barcha savollar

Node.js savollari

Ushbu savollar yordamida Node.js bo'yicha bilimingizni sinang, baholang va mustahkamlang.

1 / 36Bilaman: 0Bilmayman: 0O'tkazildi: 0

Node.js nima?

Barcha savollar va javoblar

Asosiy

Node.js nima?

Node.js — Chrome'ning V8 JavaScript engine'i asosida qurilgan, open-source va cross-platform JavaScript runtime. Node.js event-driven, non-blocking I/O modelidan foydalanadi, bu esa uni yengil va samarali qiladi.

Node.js'da REPL nima?

REPL — Read-Eval-Print-Loop so'zlarining qisqartmasi. Bu JavaScript kodini bajarib, natijasini darhol ko'rish imkonini beruvchi interaktiv shell. U kichik kod parchalarini sinab ko'rish va Node.js API bilan tajriba o'tkazish uchun qulay.

Node.js va JavaScript o'rtasida qanday farq bor?

Node.js — JavaScript uchun runtime environment. JavaScript esa veb-ilovalar yaratishda ishlatiladigan dasturlash tili. Node.js — JavaScript kodini veb-brauzerdan tashqarida bajara oladigan runtime environment.

Node.js'da Event Loop nima?

Event loop — Node.js'dagi barcha asynchronous vazifalarni boshqarishga mas'ul bo'lgan single-threaded sikl. U event'larni uzluksiz tekshirib turadi va ularga bog'langan callback funksiyalarni bajaradi, shu tufayli Node.js asynchronous vazifalarni samarali bajara oladi. Uning non-blocking I/O modeli bir operatsiya tugashini kutmasdan keyingisiga o'tib, bir nechta operatsiyani bir vaqtda qayta ishlash imkonini beradi — bu esa Node.js'ning scalability'si va unumdorligini oshiradi. Mavzu haqida batafsil bilish uchun ushbu videoni tomosha qiling.

Node.js va AJAX o'rtasida qanday farq bor?

Node.js — JavaScript uchun server-side runtime, AJAX esa server bilan asynchronous aloqa qilish uchun ishlatiladigan client-side texnika.

Node.js'da module'lar nima?

Module'lar — boshqa fayllarga import qilinadigan, qayta ishlatiladigan kod bloklari. Ular o'zaro bog'liq kodni dasturning boshqa qismlarida foydalanish mumkin bo'lgan yagona birlikka encapsulate qilish uchun ishlatiladi. Module'lar kodimizni bir nechta faylga bo'lish va uni boshqa fayllarda qayta ishlatish imkonini beradi. Ba'zi built-in module'lar: fs, http, path, url, util va boshqalar.

CommonJS va ESM o'rtasida qanday farq bor?

CommonJS va ES Modules — JavaScript'dagi ikki xil module tizimi. CommonJS — Node.js'da ishlatiladigan module tizimi, ES Modules esa brauzerlarda va TypeScript'da ishlatiladigan module tizimi.

CommonJS

const fs = require('fs');

CommonJS module'lari synchronous tarzda yuklanadi. Ya'ni module'dan foydalanadigan kod bajarilishidan oldin module yuklanadi va evaluate qilinadi. Module'larni yuklash uchun require(), export qilish uchun esa module.exports ishlatiladi.

ES Modules

import fs from 'fs';

ES Modules asynchronous tarzda yuklanadi. Ya'ni module undan foydalanilgan paytda yuklanadi va evaluate qilinadi. Module'larni yuklash uchun import, export qilish uchun esa export ishlatiladi.

Node.js'dagi `global` obyekti nima?

global obyekti — barcha global o'zgaruvchilar, funksiyalar va obyektlarni o'z ichiga olgan global namespace obyekti. U brauzerdagi window obyektiga o'xshaydi. Unga import qilmasdan dasturning istalgan joyidan murojaat qilish mumkin.

`process.nextTick()` va `setImmediate()` o'rtasida qanday farq bor?

process.nextTick() ham, setImmediate() ham callback funksiyani event loop'ning keyingi iteratsiyasida bajarilishi uchun rejalashtirishda ishlatiladi. Farqi shundaki, process.nextTick() callback'ni event loop'ning joriy iteratsiyasi oxirida bajaradi, setImmediate() esa callback'ni event loop'ning keyingi iteratsiyasi boshida bajaradi.

`setInterval()` nima?

setInterval() — funksiyani belgilangan qat'iy kechikish bilan qayta-qayta bajarishga yordam beruvchi global funksiya. U interval'ni yagona tarzda aniqlaydigan interval ID qaytaradi; bu ID yordamida clearInterval() funksiyasi orqali interval'ni bekor qilish mumkin.

`setTimeout()` nima?

setTimeout() — funksiyani belgilangan kechikishdan so'ng bajarishga yordam beruvchi global funksiya. U timeout'ni yagona tarzda aniqlaydigan timeout ID qaytaradi; bu ID yordamida clearTimeout() funksiyasi orqali timeout'ni bekor qilish mumkin.

Node.js'da Event Emitter'lar nima?

Event Emitter — nomlangan event'larni emit qilish va shu event'lar uchun listener'larni ro'yxatdan o'tkazish uchun ishlatiladigan sinf. U Node.js'da asynchronous event'larni boshqarish uchun ishlatiladi.

`npm` nima?

npm — Node.js uchun package manager. U Node.js ekotizimidan package'larni o'rnatish, yangilash va o'chirish uchun ishlatiladi. Shuningdek, u Node.js loyihalarining dependency'larini boshqarishda ham qo'llaniladi.

`npm` qisqartmasining to'liq shakli qanday?

npm — Node Package Manager so'zlarining qisqartmasi.

`npx` nima?

npx — Node.js package'larini o'rnatmasdan ishga tushirish imkonini beruvchi vosita. U global o'rnatilmagan Node.js package'larini bajarish uchun ishlatiladi.

`process.cwd()` nima?

process.cwd() Node.js process'ining joriy ishchi papkasini qaytaradi. U Unix'dagi pwd buyrug'iga o'xshaydi.

`process.cwd()` va `__dirname` o'rtasida qanday farq bor?

process.cwd() Node.js process'ining joriy ishchi papkasini qaytaradi, __dirname esa joriy module joylashgan papka nomini qaytaradi.

console.log(process.cwd());
// /Users/username/projects/nodejs

console.log(__dirname);
// /Users/username/projects/nodejs/src
`__filename` nima?

__filename — joriy faylning absolute yo'lini o'z ichiga olgan global o'zgaruvchi.

`process.argv` nima?

process.argv — Node.js process'i ishga tushirilganda uzatilgan command-line argument'larini o'z ichiga olgan massiv. Uning birinchi elementi Node.js bajariladigan faylining yo'li, ikkinchi elementi bajarilayotgan JavaScript faylining yo'li, qolgan elementlar esa command-line argument'laridir.

node index.js hello world
console.log(process.argv);
// [
//   '/usr/local/bin/node', -> path to the Node.js executable
//   '/Users/username/projects/nodejs/index.js', -> path to the JavaScript file being executed
//   'hello', -> command-line argument
//   'world' -> command-line argument
// ]
`fs` module'ining vazifasi nima?

File System (fs) module'i fayllarni o'qish, yozish va o'chirish kabi fayl operatsiyalarini bajarish uchun ishlatiladi. Barcha file system operatsiyalarining synchronous va asynchronous shakllari mavjud.

`path` module'ining vazifasi nima?

Path module'i fayl va papka yo'llari ustida amallar bajarish uchun ishlatiladi. U yo'llarni resolve va normalize qilish, yo'llarni birlashtirish hamda fayl va papka nomlarini ajratib olish uchun metodlar taqdim etadi.

Node.js'da faylni qanday o'qish mumkin?

fs.readFile() metodi fayl tarkibini asynchronous tarzda o'qish uchun ishlatiladi. U argument sifatida o'qiladigan faylning yo'lini va callback funksiyani qabul qiladi. Callback funksiya ikkita argument — err va data bilan chaqiriladi. Agar faylni o'qish vaqtida xato yuz bersa, err argumentida xato obyekti bo'ladi. Aks holda data argumentida fayl tarkibi bo'ladi.

Node.js'da `.env` faylidan environment variable'larni qanday yuklash mumkin?

dotenv package'i .env faylidagi environment variable'larni process.env obyektiga yuklash uchun ishlatiladi. U API key'lar, ma'lumotlar bazasi credential'lari va shu kabi maxfiy ma'lumotlarni manba kodida hardcode qilish o'rniga .env faylida saqlash uchun qo'llaniladi.

Node.js'da environment variable'larga qanday murojaat qilish mumkin?

Environment variable'larga process.env obyekti orqali murojaat qilish mumkin. Bu joriy process'da belgilangan barcha environment variable'larni o'z ichiga olgan obyekt.

Node.js'da veb-serverni qanday yaratish mumkin?

Node.js'da oddiy Hello, World! HTTP serverini yaratish uchun http module'idan foydalanishingiz mumkin. U HTTP server taqdim etadi, createServer() metodi esa kelayotgan so'rovlarni qayta ishlovchi callback funksiyaga ega server instance'ini yaratadi

import http from 'node:http';

const server = http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end('Hello World\n');
});

server.listen(3000, () => {
  console.log('Server running at http://localhost:3000/');
});
Node.js'da stream'lar nima?

Stream'lar — ma'lumotlarni manbadan uzluksiz o'qish yoki manzilga uzluksiz yozish imkonini beruvchi obyektlar. Ular katta hajmdagi ma'lumotlarni samarali qayta ishlash uchun ishlatiladi.

`child_process` module'idagi `fork` va `spawn` metodlari o'rtasida qanday farq bor?

fork metodi boshqa JavaScript faylini alohida worker'da ishga tushirmoqchi bo'lganingizda ishlatiladi. Buni muayyan vazifa topshirilgan do'stingizga o'xshatish mumkin. Siz u bilan xabarlar orqali muloqot qilasiz, u ham sizga javob xabarlarini yubora oladi. spawn metodi esa buyruqni alohida process'da ishga tushirmoqchi bo'lganingizda ishlatiladi. Bu kimdandir muayyan ishni bajarib berishni so'rashga o'xshaydi. Siz u bilan stdin/stdout/stderr orqali muloqot qila olasiz, ammo bu ko'proq buyruq berib, natijasini olishga o'xshaydi.

`os` module'i nima?

os module'i operatsion tizim bilan ishlash uchun metodlar taqdim etadi. Undan operatsion tizim haqidagi ma'lumotlarni, masalan, hostname, platforma, arxitektura va hokazolarni olish uchun foydalanish mumkin.

Node.js'da DOM'ga murojaat qila olasizmi?

Yo'q, Node.js'da DOM'ga murojaat qila olmaysiz, chunki unda DOM mavjud emas. Node.js — JavaScript uchun server-side runtime, shuning uchun u brauzerning DOM'iga kira olmaydi.

Node.js'da Clustering nima?

Clustering — yukni bir nechta process'lar o'rtasida taqsimlash uchun ishlatiladigan texnika. U Node.js ilovalarining unumdorligi va scalability'sini oshirish uchun qo'llaniladi.

Node.js'da memory leak'lar qanday yuzaga kelishi mumkin?

Memory leak dastur xotira ajratib, u endi kerak bo'lmay qolganda ham uni bo'shatmasa yuzaga keladi. Bu dasturdagi bug'lar yoki dasturning qanday loyihalanganligi sababli sodir bo'lishi mumkin. Node.js'da memory leak'lar closure'lar, circular reference'lar va global o'zgaruvchilardan foydalanish tufayli yuzaga kelishi mumkin.

`process.nextTick`, `Promise`, `setTimeout` va `setImmediate` qanday ustuvorlik tartibida bajariladi?

process.nextTick, Promise, setTimeout va setImmediate'ning ustuvorlik tartibi quyidagicha:

  1. process.nextTick: eng yuqori ustuvorlikka ega; joriy event loop sikli tugashi bilan, boshqa har qanday I/O event'lari yoki timer'lardan oldin darhol bajariladi.
  2. Promise: microtask queue'da, joriy event loop siklidan keyin, lekin keyingi sikldan oldin bajariladi.
  3. setTimeout: timer queue'da, joriy event loop siklidan keyin, millisekundlarda ko'rsatilgan minimal kechikish bilan bajariladi.
  4. setImmediate: check queue'da bajariladi, biroq uning tartibi tizim va yuklamaga qarab o'zgarishi mumkin. U odatda I/O event'laridan keyin, event loop'ning keyingi iteratsiyasida ishlaydi.
console.log('start');
Promise.resolve().then(() => console.log('Promise'));
setTimeout(() => console.log('setTimeout'), 0);
process.nextTick(() => console.log('process.nextTick'));
setImmediate(() => console.log('setImmediate'));
console.log('end');

// Output:
// start
// end
// process.nextTick
// Promise
// setTimeout
// setImmediate

Xulosa qilib aytganda, bajarilish tartibi odatda process.nextTick > Promise > setTimeout > setImmediate ko'rinishida bo'ladi. Biroq ayrim vaziyatlarda xatti-harakat farq qilishi mumkinligini, tartibga esa tizim yuklamasi va bir vaqtda bajarilayotgan boshqa operatsiyalar kabi omillar ta'sir qilishi mumkinligini yodda tuting.

`process.exit()` nima?

process.exit() — joriy process'ni yakunlash uchun ishlatiladigan metod. U argument sifatida ixtiyoriy exit code qabul qiladi. Agar exit code ko'rsatilmasa, u default holatda 0 bo'ladi.

Node.js'da qanday exit code'lar mavjud?

Node.js'da quyidagi exit code'lar ishlatiladi:

  • 0: Muvaffaqiyatli yakunlandi
  • 1: Uncaught Fatal Exception
  • 2: Ishlatilmaydi
  • 3: Internal JavaScript Parse Error
  • 4: Internal JavaScript Evaluation Failure
  • 5: Fatal Error
  • 6: Non-function Internal Exception Handler
  • 7: Internal Exception Handler Run-Time Failure
  • 8: Ishlatilmaydi
  • 9: Invalid Argument
  • 10: Internal JavaScript Run-Time Failure
  • 12: Invalid Debug Argument
  • 13: Uncaught Exception
  • 14: Unhandled Promise Rejection
  • 15: Fatal Exception
  • 16: Signal Exits
Node.js xatolarni qanday handle qiladi?

Node.js'da xatolar haqida xabar berishning to'rtta asosiy usuli bor:

try...catch bloklari

try...catch bloklari — JavaScript'da xatolarni handle qilishning eng oddiy usuli. Ular synchronous bo'lib, faqat synchronous koddagi xatolarni handle qilish uchun ishlatilishi mumkin. Ular callback'lar va promise'lar kabi asynchronous kod uchun mos emas.

import fs from 'node:fs';

try {
  const data = fs.readFileSync('file.md', 'utf-8');
  console.log(data);
} catch (err) {
  console.error(err);
}

Callbacks

Callback'lar — asynchronous koddagi xatolarni handle qilishning eng keng tarqalgan usuli. Ular funksiyaga oxirgi argument sifatida uzatiladi va funksiya ishini tugatganda yoki xato bilan yakunlanganda chaqiriladi.

import fs from 'node:fs';

fs.readFile('file.md', 'utf-8', (err, data) => {
  if (err) {
    console.error(err);
    return;
  }

  console.log(data);
});

Promises

Promise'lar — asynchronous koddagi xatolarni handle qilishning zamonaviyroq usuli. Ularni funksiyalar qaytaradi va ularni zanjir tarzida bir-biriga ulash mumkin. Funksiya ishini tugatganda promise resolve bo'ladi, xato bilan yakunlanganda esa reject bo'ladi.

import fs from 'node:fs/promises';

fs.readFile('file.md', 'utf-8')
  .then((data) => {
    console.log(data);
  })
  .catch((err) => {
    console.error(err);
  });

Event emitters

Event emitter'lar — asynchronous koddagi xatolarni handle qilishning ilg'orroq usuli. Ularni funksiyalar qaytaradi va xato yuz berganda ular error event'ini emit qiladi. Funksiya ishini tugatganda ular resolve bo'ladi, xato bilan yakunlanganda esa reject bo'ladi.

import fs from 'node:fs';

const reader = fs.createReadStream('file.md', 'utf-8');
reader.on('data', (data) => {
  console.log(data);
});

reader.on('error', (err) => {
  console.error(err);
});

Boshlang'ich

Node.js nima?

Node.js — Chrome'ning V8 JavaScript engine'i asosida qurilgan, open-source va cross-platform JavaScript runtime. Node.js event-driven, non-blocking I/O modelidan foydalanadi, bu esa uni yengil va samarali qiladi.

Node.js'da REPL nima?

REPL — Read-Eval-Print-Loop so'zlarining qisqartmasi. Bu JavaScript kodini bajarib, natijasini darhol ko'rish imkonini beruvchi interaktiv shell. U kichik kod parchalarini sinab ko'rish va Node.js API bilan tajriba o'tkazish uchun qulay.

Node.js va JavaScript o'rtasida qanday farq bor?

Node.js — JavaScript uchun runtime environment. JavaScript esa veb-ilovalar yaratishda ishlatiladigan dasturlash tili. Node.js — JavaScript kodini veb-brauzerdan tashqarida bajara oladigan runtime environment.

Node.js va AJAX o'rtasida qanday farq bor?

Node.js — JavaScript uchun server-side runtime, AJAX esa server bilan asynchronous aloqa qilish uchun ishlatiladigan client-side texnika.

Node.js'da module'lar nima?

Module'lar — boshqa fayllarga import qilinadigan, qayta ishlatiladigan kod bloklari. Ular o'zaro bog'liq kodni dasturning boshqa qismlarida foydalanish mumkin bo'lgan yagona birlikka encapsulate qilish uchun ishlatiladi. Module'lar kodimizni bir nechta faylga bo'lish va uni boshqa fayllarda qayta ishlatish imkonini beradi. Ba'zi built-in module'lar: fs, http, path, url, util va boshqalar.

`setInterval()` nima?

setInterval() — funksiyani belgilangan qat'iy kechikish bilan qayta-qayta bajarishga yordam beruvchi global funksiya. U interval'ni yagona tarzda aniqlaydigan interval ID qaytaradi; bu ID yordamida clearInterval() funksiyasi orqali interval'ni bekor qilish mumkin.

`setTimeout()` nima?

setTimeout() — funksiyani belgilangan kechikishdan so'ng bajarishga yordam beruvchi global funksiya. U timeout'ni yagona tarzda aniqlaydigan timeout ID qaytaradi; bu ID yordamida clearTimeout() funksiyasi orqali timeout'ni bekor qilish mumkin.

`npm` nima?

npm — Node.js uchun package manager. U Node.js ekotizimidan package'larni o'rnatish, yangilash va o'chirish uchun ishlatiladi. Shuningdek, u Node.js loyihalarining dependency'larini boshqarishda ham qo'llaniladi.

`npm` qisqartmasining to'liq shakli qanday?

npm — Node Package Manager so'zlarining qisqartmasi.

`npx` nima?

npx — Node.js package'larini o'rnatmasdan ishga tushirish imkonini beruvchi vosita. U global o'rnatilmagan Node.js package'larini bajarish uchun ishlatiladi.

`fs` module'ining vazifasi nima?

File System (fs) module'i fayllarni o'qish, yozish va o'chirish kabi fayl operatsiyalarini bajarish uchun ishlatiladi. Barcha file system operatsiyalarining synchronous va asynchronous shakllari mavjud.

`path` module'ining vazifasi nima?

Path module'i fayl va papka yo'llari ustida amallar bajarish uchun ishlatiladi. U yo'llarni resolve va normalize qilish, yo'llarni birlashtirish hamda fayl va papka nomlarini ajratib olish uchun metodlar taqdim etadi.

Node.js'da faylni qanday o'qish mumkin?

fs.readFile() metodi fayl tarkibini asynchronous tarzda o'qish uchun ishlatiladi. U argument sifatida o'qiladigan faylning yo'lini va callback funksiyani qabul qiladi. Callback funksiya ikkita argument — err va data bilan chaqiriladi. Agar faylni o'qish vaqtida xato yuz bersa, err argumentida xato obyekti bo'ladi. Aks holda data argumentida fayl tarkibi bo'ladi.

Node.js'da `.env` faylidan environment variable'larni qanday yuklash mumkin?

dotenv package'i .env faylidagi environment variable'larni process.env obyektiga yuklash uchun ishlatiladi. U API key'lar, ma'lumotlar bazasi credential'lari va shu kabi maxfiy ma'lumotlarni manba kodida hardcode qilish o'rniga .env faylida saqlash uchun qo'llaniladi.

Node.js'da environment variable'larga qanday murojaat qilish mumkin?

Environment variable'larga process.env obyekti orqali murojaat qilish mumkin. Bu joriy process'da belgilangan barcha environment variable'larni o'z ichiga olgan obyekt.

Node.js'da command line orqali foydalanuvchi kiritgan ma'lumotni qanday olish mumkin?

Command line orqali foydalanuvchi kiritgan ma'lumotni olish uchun readline module'idan foydalanishingiz mumkin. U Readable stream'dan (masalan, process.stdin) ma'lumotlarni qatorma-qator o'qish uchun interfeys taqdim etadi.

import readline from 'node:readline';
import { stdin as input, stdout as output } from 'node:process';

const rl = readline.createInterface({ input, output });

rl.question('What do you think of Node.js? ', (answer) => {
  console.log(`Thank you for your valuable feedback: ${answer}`);
  rl.close();
});

rl.on('close', () => {
  console.log('\nBYE BYE !!!');
  process.exit(0);
});
Node.js'da veb-serverni qanday yaratish mumkin?

Node.js'da oddiy Hello, World! HTTP serverini yaratish uchun http module'idan foydalanishingiz mumkin. U HTTP server taqdim etadi, createServer() metodi esa kelayotgan so'rovlarni qayta ishlovchi callback funksiyaga ega server instance'ini yaratadi

import http from 'node:http';

const server = http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end('Hello World\n');
});

server.listen(3000, () => {
  console.log('Server running at http://localhost:3000/');
});

O'rta

Node.js'da Event Loop nima?

Event loop — Node.js'dagi barcha asynchronous vazifalarni boshqarishga mas'ul bo'lgan single-threaded sikl. U event'larni uzluksiz tekshirib turadi va ularga bog'langan callback funksiyalarni bajaradi, shu tufayli Node.js asynchronous vazifalarni samarali bajara oladi. Uning non-blocking I/O modeli bir operatsiya tugashini kutmasdan keyingisiga o'tib, bir nechta operatsiyani bir vaqtda qayta ishlash imkonini beradi — bu esa Node.js'ning scalability'si va unumdorligini oshiradi. Mavzu haqida batafsil bilish uchun ushbu videoni tomosha qiling.

CommonJS va ESM o'rtasida qanday farq bor?

CommonJS va ES Modules — JavaScript'dagi ikki xil module tizimi. CommonJS — Node.js'da ishlatiladigan module tizimi, ES Modules esa brauzerlarda va TypeScript'da ishlatiladigan module tizimi.

CommonJS

const fs = require('fs');

CommonJS module'lari synchronous tarzda yuklanadi. Ya'ni module'dan foydalanadigan kod bajarilishidan oldin module yuklanadi va evaluate qilinadi. Module'larni yuklash uchun require(), export qilish uchun esa module.exports ishlatiladi.

ES Modules

import fs from 'fs';

ES Modules asynchronous tarzda yuklanadi. Ya'ni module undan foydalanilgan paytda yuklanadi va evaluate qilinadi. Module'larni yuklash uchun import, export qilish uchun esa export ishlatiladi.

Node.js'dagi `global` obyekti nima?

global obyekti — barcha global o'zgaruvchilar, funksiyalar va obyektlarni o'z ichiga olgan global namespace obyekti. U brauzerdagi window obyektiga o'xshaydi. Unga import qilmasdan dasturning istalgan joyidan murojaat qilish mumkin.

`process.nextTick()` va `setImmediate()` o'rtasida qanday farq bor?

process.nextTick() ham, setImmediate() ham callback funksiyani event loop'ning keyingi iteratsiyasida bajarilishi uchun rejalashtirishda ishlatiladi. Farqi shundaki, process.nextTick() callback'ni event loop'ning joriy iteratsiyasi oxirida bajaradi, setImmediate() esa callback'ni event loop'ning keyingi iteratsiyasi boshida bajaradi.

Node.js'da Event Emitter'lar nima?

Event Emitter — nomlangan event'larni emit qilish va shu event'lar uchun listener'larni ro'yxatdan o'tkazish uchun ishlatiladigan sinf. U Node.js'da asynchronous event'larni boshqarish uchun ishlatiladi.

`process.cwd()` nima?

process.cwd() Node.js process'ining joriy ishchi papkasini qaytaradi. U Unix'dagi pwd buyrug'iga o'xshaydi.

`process.cwd()` va `__dirname` o'rtasida qanday farq bor?

process.cwd() Node.js process'ining joriy ishchi papkasini qaytaradi, __dirname esa joriy module joylashgan papka nomini qaytaradi.

console.log(process.cwd());
// /Users/username/projects/nodejs

console.log(__dirname);
// /Users/username/projects/nodejs/src
`__filename` nima?

__filename — joriy faylning absolute yo'lini o'z ichiga olgan global o'zgaruvchi.

`process.argv` nima?

process.argv — Node.js process'i ishga tushirilganda uzatilgan command-line argument'larini o'z ichiga olgan massiv. Uning birinchi elementi Node.js bajariladigan faylining yo'li, ikkinchi elementi bajarilayotgan JavaScript faylining yo'li, qolgan elementlar esa command-line argument'laridir.

node index.js hello world
console.log(process.argv);
// [
//   '/usr/local/bin/node', -> path to the Node.js executable
//   '/Users/username/projects/nodejs/index.js', -> path to the JavaScript file being executed
//   'hello', -> command-line argument
//   'world' -> command-line argument
// ]
`os` module'i nima?

os module'i operatsion tizim bilan ishlash uchun metodlar taqdim etadi. Undan operatsion tizim haqidagi ma'lumotlarni, masalan, hostname, platforma, arxitektura va hokazolarni olish uchun foydalanish mumkin.

Node.js'da DOM'ga murojaat qila olasizmi?

Yo'q, Node.js'da DOM'ga murojaat qila olmaysiz, chunki unda DOM mavjud emas. Node.js — JavaScript uchun server-side runtime, shuning uchun u brauzerning DOM'iga kira olmaydi.

Node.js'da memory leak'lar qanday yuzaga kelishi mumkin?

Memory leak dastur xotira ajratib, u endi kerak bo'lmay qolganda ham uni bo'shatmasa yuzaga keladi. Bu dasturdagi bug'lar yoki dasturning qanday loyihalanganligi sababli sodir bo'lishi mumkin. Node.js'da memory leak'lar closure'lar, circular reference'lar va global o'zgaruvchilardan foydalanish tufayli yuzaga kelishi mumkin.

`process.nextTick`, `Promise`, `setTimeout` va `setImmediate` qanday ustuvorlik tartibida bajariladi?

process.nextTick, Promise, setTimeout va setImmediate'ning ustuvorlik tartibi quyidagicha:

  1. process.nextTick: eng yuqori ustuvorlikka ega; joriy event loop sikli tugashi bilan, boshqa har qanday I/O event'lari yoki timer'lardan oldin darhol bajariladi.
  2. Promise: microtask queue'da, joriy event loop siklidan keyin, lekin keyingi sikldan oldin bajariladi.
  3. setTimeout: timer queue'da, joriy event loop siklidan keyin, millisekundlarda ko'rsatilgan minimal kechikish bilan bajariladi.
  4. setImmediate: check queue'da bajariladi, biroq uning tartibi tizim va yuklamaga qarab o'zgarishi mumkin. U odatda I/O event'laridan keyin, event loop'ning keyingi iteratsiyasida ishlaydi.
console.log('start');
Promise.resolve().then(() => console.log('Promise'));
setTimeout(() => console.log('setTimeout'), 0);
process.nextTick(() => console.log('process.nextTick'));
setImmediate(() => console.log('setImmediate'));
console.log('end');

// Output:
// start
// end
// process.nextTick
// Promise
// setTimeout
// setImmediate

Xulosa qilib aytganda, bajarilish tartibi odatda process.nextTick > Promise > setTimeout > setImmediate ko'rinishida bo'ladi. Biroq ayrim vaziyatlarda xatti-harakat farq qilishi mumkinligini, tartibga esa tizim yuklamasi va bir vaqtda bajarilayotgan boshqa operatsiyalar kabi omillar ta'sir qilishi mumkinligini yodda tuting.

`process.exit()` nima?

process.exit() — joriy process'ni yakunlash uchun ishlatiladigan metod. U argument sifatida ixtiyoriy exit code qabul qiladi. Agar exit code ko'rsatilmasa, u default holatda 0 bo'ladi.

Node.js'da qanday exit code'lar mavjud?

Node.js'da quyidagi exit code'lar ishlatiladi:

  • 0: Muvaffaqiyatli yakunlandi
  • 1: Uncaught Fatal Exception
  • 2: Ishlatilmaydi
  • 3: Internal JavaScript Parse Error
  • 4: Internal JavaScript Evaluation Failure
  • 5: Fatal Error
  • 6: Non-function Internal Exception Handler
  • 7: Internal Exception Handler Run-Time Failure
  • 8: Ishlatilmaydi
  • 9: Invalid Argument
  • 10: Internal JavaScript Run-Time Failure
  • 12: Invalid Debug Argument
  • 13: Uncaught Exception
  • 14: Unhandled Promise Rejection
  • 15: Fatal Exception
  • 16: Signal Exits
Node.js xatolarni qanday handle qiladi?

Node.js'da xatolar haqida xabar berishning to'rtta asosiy usuli bor:

try...catch bloklari

try...catch bloklari — JavaScript'da xatolarni handle qilishning eng oddiy usuli. Ular synchronous bo'lib, faqat synchronous koddagi xatolarni handle qilish uchun ishlatilishi mumkin. Ular callback'lar va promise'lar kabi asynchronous kod uchun mos emas.

import fs from 'node:fs';

try {
  const data = fs.readFileSync('file.md', 'utf-8');
  console.log(data);
} catch (err) {
  console.error(err);
}

Callbacks

Callback'lar — asynchronous koddagi xatolarni handle qilishning eng keng tarqalgan usuli. Ular funksiyaga oxirgi argument sifatida uzatiladi va funksiya ishini tugatganda yoki xato bilan yakunlanganda chaqiriladi.

import fs from 'node:fs';

fs.readFile('file.md', 'utf-8', (err, data) => {
  if (err) {
    console.error(err);
    return;
  }

  console.log(data);
});

Promises

Promise'lar — asynchronous koddagi xatolarni handle qilishning zamonaviyroq usuli. Ularni funksiyalar qaytaradi va ularni zanjir tarzida bir-biriga ulash mumkin. Funksiya ishini tugatganda promise resolve bo'ladi, xato bilan yakunlanganda esa reject bo'ladi.

import fs from 'node:fs/promises';

fs.readFile('file.md', 'utf-8')
  .then((data) => {
    console.log(data);
  })
  .catch((err) => {
    console.error(err);
  });

Event emitters

Event emitter'lar — asynchronous koddagi xatolarni handle qilishning ilg'orroq usuli. Ularni funksiyalar qaytaradi va xato yuz berganda ular error event'ini emit qiladi. Funksiya ishini tugatganda ular resolve bo'ladi, xato bilan yakunlanganda esa reject bo'ladi.

import fs from 'node:fs';

const reader = fs.createReadStream('file.md', 'utf-8');
reader.on('data', (data) => {
  console.log(data);
});

reader.on('error', (err) => {
  console.error(err);
});

CLI

Node.js'da command line orqali foydalanuvchi kiritgan ma'lumotni qanday olish mumkin?

Command line orqali foydalanuvchi kiritgan ma'lumotni olish uchun readline module'idan foydalanishingiz mumkin. U Readable stream'dan (masalan, process.stdin) ma'lumotlarni qatorma-qator o'qish uchun interfeys taqdim etadi.

import readline from 'node:readline';
import { stdin as input, stdout as output } from 'node:process';

const rl = readline.createInterface({ input, output });

rl.question('What do you think of Node.js? ', (answer) => {
  console.log(`Thank you for your valuable feedback: ${answer}`);
  rl.close();
});

rl.on('close', () => {
  console.log('\nBYE BYE !!!');
  process.exit(0);
});

Murakkab

Node.js'da stream'lar nima?

Stream'lar — ma'lumotlarni manbadan uzluksiz o'qish yoki manzilga uzluksiz yozish imkonini beruvchi obyektlar. Ular katta hajmdagi ma'lumotlarni samarali qayta ishlash uchun ishlatiladi.

`child_process` module'idagi `fork` va `spawn` metodlari o'rtasida qanday farq bor?

fork metodi boshqa JavaScript faylini alohida worker'da ishga tushirmoqchi bo'lganingizda ishlatiladi. Buni muayyan vazifa topshirilgan do'stingizga o'xshatish mumkin. Siz u bilan xabarlar orqali muloqot qilasiz, u ham sizga javob xabarlarini yubora oladi. spawn metodi esa buyruqni alohida process'da ishga tushirmoqchi bo'lganingizda ishlatiladi. Bu kimdandir muayyan ishni bajarib berishni so'rashga o'xshaydi. Siz u bilan stdin/stdout/stderr orqali muloqot qila olasiz, ammo bu ko'proq buyruq berib, natijasini olishga o'xshaydi.

Node.js'da Clustering nima?

Clustering — yukni bir nechta process'lar o'rtasida taqsimlash uchun ishlatiladigan texnika. U Node.js ilovalarining unumdorligi va scalability'sini oshirish uchun qo'llaniladi.

Yo'l xaritalariQo'llanmalarFAQYouTube

yo'lxaritaroadmap.shasosida

Hamjamiyat tomonidan yaratilgan yo'l xaritalari, eng yaxshi amaliyotlar, loyihalar, maqolalar, manbalar va yo'nalishlar — o'z yo'lingizni tanlash va kasbingizda o'sish uchun.

© yo'lxarita·Shartlar·Maxfiylik·

roadmap.sh

Barcha kontent roadmap.sh loyihasidan olingan (© Kamran Ahmed) va shaxsiy o'rganish uchun o'zbek tiliga tarjima qilinmoqda.

Qidiruv

Yo'l xaritalari, loyihalar va savollarni qidiring