Node.js. Built-in modules

Agenda

  • node.js built-in modules
  • Url, fetch, http
  • FS & path
  • os & process
  • Event emitter
  • timers & utils

Node.js Builtin modules

  • 62 модуля
  • многие вещи являются ситуативными
  • модули можно писать на других языках программирования
    • для node.js исключительно - napi(С++)
    • можно использовать WASM

URL,  fetch

URL - является глобальным объектом

fetch - является глобальной функцией

URL и fetch - часть спецификации HTML5(WHATWG)

URL

модуль по работе со веб адресом

URL

import { URL } from 'node:url'

const myURL_one = new URL('/foo', 'https://example.org/');
// https://example.org/foo 

const myURL_two = new URL('https://my-site.com');
// https://my-site.com

new URL('some random string'); // error!

предоставляет 2 класса

  • URL
  • URLSearchParams

URLSearchParams

import { URL, URLSearchParams } from 'node:url'

const myURL = new URL('https://example.org/?abc=123');
console.log(myURL.searchParams.get('abc'));
// Prints 123

myURL.searchParams.append('abc', 'xyz');
console.log(myURL.href);
// Prints https://example.org/?abc=123&abc=xyz

const params = URLSearchParams({qwe: 'zxc'})
params.toString() // qwe=zxc

  • get
  • getAll
  • set
  • append
  • delete
  • forEach
  • toString
  • size

Fetch

Позволяет обращаться к удаленным ресурсам

fetch(resource)
fetch(resource, options)

// resource - string or Request instance
// options - object or RequestInit object

Пример

async function main(){
  const res = await fetch('https://google.com');
  console.log(res.ok) // true
  console.log(await res.text()) // '<!doctype html>....'
}
main()

Пример. POST

async function main(){
  const res = await fetch('https://jsonplaceholder.typicode.com/posts', {
    method: "POST",
    headers: {
      "Accept": "application/json",
      "Content-Type": "application/json"
    },
    body: JSON.stringify({
      name: "some custom name",
    })
  });
  console.log(await res.json())
  // {name: "some custom name", id: 102}
}
main()

Response

Свойства

  • ok 
  • status
  • statusText

Методы

  • text
  • json
  • blob

FS & path

Модули отвечают за фаиловую систему и правильность путей

path

Модуль node:path предоставляет утилиты для работы с путями к файлам и каталогам.

// CJS
const path = require('node:path')

// esm
import path from 'node:path'

path

import path from 'node:path'

console.log(process.env.PATH);
// Windows: 'C:\Windows\system32;C:\Windows;C:\Program Files\node\'
// Unix: '/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin'

path.delimiter // ; - Windows : - Unix

process.env.PATH.split(path.delimiter)

path.isAbsolute('/foo/bar'); // unix - true
path.isAbsolute('./bar'); // true

path.isAbsolute('C:/foo/..');   // windows - true
path.isAbsolute('bar\\baz');    // windows false

path.resolve('wwwroot', 'static_files/png/', '../gif/image.gif');
// If the current working directory is /home/myself/node,
// this returns '/home/myself/node/wwwroot/static_files/gif/image.gif' 

path

Часто используемые функции

  • normalize
  • join
  • parse
  • resolve

Часто используемые константы

  • delimiter
  • sep

FS

предназначен для чтения\записи фаилов

существует асинхронный импорт

import fs from 'node:fs' // sync api
import fsAsync from 'node:fs/promises' // async api

const contentOne = fs.readFileSync('file.txt')
fs.readFile('file.txt', (err, content) => {
  if(err) throw err
  // work with content
})

const contentTwo = await fs.readFile('file.txt')

FS

Синхронные операции лучше избегать из-за возможности "заморозить" ОС из-за чтения-записи больших фаилов

Синхронные операции имеют суфикс sync

синхронные функции, которые работают на колбеках можно промисифицировать

FS. Частые API

  • read(File,Dir)
  • stat/exists
  • rm(File,Dir)
  • writeFile
  • appendFile
  • mkdir

Timers & utils

Таимеры(планирование) - часть стандарта HTML5.

Node.js таимеры отличаются

timers

import timers from 'node:timers'
import timersAsync from 'node:timers/promises'

import { setTimeout, setInterval } from 'node:timers/promises'

await setTimeout(2000) // wait 2 sec

поставляет асинхронное апи

timers

Отличия от браузерного АПИ

  • поддержка отмены(abortSignal/AbortController API)
  • поддержка Promises
  • внутреннее отичие

utils

набор утилит

  • Text Encoder/Decoder
  • debug
  • inspect
  • deprecate
  • format
  • promisify

OS & Process

Модули отвечают за информацию об операционной системы и текущем процессе выполнения

import os from 'node:os'

import process from 'node:process'

process модуль является "глобальным" объектом

OS. Частые API

  • arch
  • cpus
  • env
  • uptime
  • tmpdir
  • homedir
  • version
  • type
  • release

Process.

Объект процесса предоставляет информацию о текущем процессе Node.js и управление им.

Процесс наследуется от события

  • warning
  • exit
  • SIGTERM

Process. Частые API

  • env
  • cwd()
  • chdir()
  • pid
  • ppid
  • argv
  • exit()

Events

один из важнейших модулей node.js 

на нем построены такие модули как

  • process, fs
  • net, server, http, https, http2, websocket
  • streams
  • подпроцессы (cluster, worker,child_process)
  • readline, REPL

Concept

Example

import { EventEmitter } from 'node:events'

const myEmitter = new EventEmitter()

myEmitter.on('event 1', () => {
  console.log('event fired!!!')
})

setTimeout(() => {
  myEmitter.emit('event 1')
})

References

10 - node.js modules

By vitalic gorodkov

10 - node.js modules

  • 188