Урок 22 Журналирование. Библиотека morgan Журналирование — регистрация процессов, происходящих в работающем вебприложении: получения запросов, генерирования ответов, возникновения ошибок и т. п. Журнал — массив записей, созданных в процессе журналирования. Запись журнала — сведения об отдельном событии, произошедшем в работающем приложении. Отдельная запись журнала может сообщать о получении запроса и содержать сведения о нем: интернет-адрес, с которого пришел запрос, HTTP-метод, которым он был сделан, целевой путь, наборы GET- и POST-параметров, временну´ю отметку получения запроса, время генерирования ответа, код статуса ответа и др. Журнал может как выводиться в консоли, так и сохраняться в файле (файле журнала). Обычно файл журнала имеет текстовый формат (для удобства просмотра в текстовых редакторах) и расширение log. Реализовать в веб-приложении журналирование генерируемых ответов в ответ на получение запросов проще всего с применением дополнительной библиотеки morgan. На заметку Вся документация по библиотеке morgan опубликована по интернет-адресу: https://expressjs.com/en/resources/middleware/morgan.html. Установить версию 1.10.0 этой библиотеки, описываемую в книге, можно подачей команды: npm install morgan@^1.10.0 22.1. Введение в библиотеку morgan Фабрика функций morgan() объявлена в библиотеке и подвергнута экспорту по умолчанию: morgan(<формат записей>[, <параметры>]) Доступные для указания форматы записей создаваемого журнала и поддерживаемые параметры мы рассмотрим позже.
Урок 22. Журналирование. Библиотека morgan 469 Фабрика функций возвращает посредник, который и выполняет журналирование. Пример: import morgan from 'morgan'; . . . app.use(morgan('dev')); По умолчанию посредник выводит журнал в консоли и записывает в журнал сведения обо всех сгенерированных ответах. Изменить это поведение можно, указав соответствующие параметры в вызове фабрики функций morgan() (будут рассмотрены позже). 22.2. Задание формата записей В качестве формата записей в вызове фабрики функций morgan() можно указать как название одного из поддерживаемых предопределенных форматов, так и непосредственно строку, описывающую нужный формат. 22.2.1. Предопределенные форматы Библиотека morgan предлагает ряд предопределенных форматов записей, имеющих следующие названия: dev — краткий, рассчитанный на разработчиков. Выводит HTTP-метод, которым был выполнен запрос, целевой путь запроса, код статуса ответа, продолжительность генерирования ответа в миллисекундах и размер тела ответа в байтах; tiny — также краткий. Полностью аналогичен dev, только сначала выводит размер тела ответа, а потом — продолжительность его генерирования; combined — наиболее подробный формат, аналогичный поддерживаемому вебсервером Apache HTTP Server. Выводит интернет-адрес клиентского хоста, приславшего запрос, текущие дату и время на момент генерирования ответа, HTTP-метод, целевой путь, версию протокола HTTP, код статуса ответа, размер тела ответа в байтах, интернетадрес страницы, с которой пришел запрос (извлекается из заголовка Referer1 или Referrer запроса), и сведения о веб-обозревателе (из заголовка User-Agent запроса); common — также весьма подробный. Похож на combined, только не выводит интернет-адрес страницы, с которой пришел запрос, и сведения о веб-обозревателе; 1 Заголовок Referer определен в интернет-стандартах, однако вследствие исторического курьеза, в его имени присутствует орфографическая ошибка. Заголовок Referrer написан правильно, однако не является стандартным.
470 Часть V. Ввод веб-приложений в эксплуатацию short — относительно компактный. Похож на combined, только не выводит текущие дату и время, интернет-адрес страницы, с которой пришел запрос, и сведения о веб-обозревателе, но выводит продолжительность генерирования ответа в миллисекундах. Если приложение отправило пустой ответ с кодом статуса 304 (ресурс не изменился1 ), во всех случаях вместо размера его тела выводится дефис. Пример кода, использующего предопределенный формат, с названием dev был приведен в разд. 22.2. 22.2.2. Написание строк форматов Также можно указать строку формата, непосредственно описывающую требуемый формат записей. Строка формата представляет собой обычную строку, содержащую литералы, вместо которых при выводе записей журнала будут подставлены те или иные данные. morgan предоставляет следующие литералы: :remote-addr — интернет-адрес клиентского хоста, с которого пришел запрос; :method — HTTP-метод, которым был выполнен полученный запрос; :url — целевой путь запроса; :date[<формат>] — текущие дата и время в заданном формате: • clf — <число>/<название месяца>/<год>:<часы>:<минуты>: <секунды> <разность между местным временем и UTC> • iso — <год>-<номер месяца>-<год>T<часы>:<минуты>:<секунды>. <миллисекунды> <разность между местным временем и UTC> • web — <название дня недели>, <число> <название месяца> <год> <часы>:<минуты>:<секунды> <разность между местным временем и UTC> Название месяца приводится английское, сокращенное, состоящее из трех букв (например, Aug — август). Номера месяцев начинаются с 1 (соответственно номер августа — это 8). Название дня недели также английское, сокращенное, из трех букв (к примеру, Tue — вторник). Разность между местным временем и UTC (всемирно скоординированным временем) может выражаться в разных форматах; :response-time[ [<количество цифр>] ] — промежуток времени между получением запроса и началом генерирования ответа в миллисекундах, с заданным количеством цифр после запятой (если не указано, принимается равным 3); :status — код статуса ответа; 1 Такой ответ сообщает веб-обозревателю, что он может не загружать ресурс по сети, а использовать его кешированную копию. Подробно о кешировании на стороне клиента рассказывалось в разд. 20.1.1.
Урок 22. Журналирование. Библиотека morgan 471 :total-time[ [<количество цифр>] ] — промежуток времени между получением запроса и отправкой готового ответа в миллисекундах, с заданным количеством цифр после запятой (если не указано, принимается равным 3); :req[<заголовок>] — значение указанного заголовка запроса или дефис, если такого заголовка в запросе нет. Заголовок можно указать в произвольном регистре; :res[<заголовок>] — значение указанного заголовка ответа или дефис, если такого заголовка в ответе нет. Заголовок можно указать в произвольном регистре; :referrer — интернет-адрес страницы, с которой был выполнен запрос (берется из заголовка Referer или Referrer запроса); :user-agent — сведения о клиентской программе, приславшей запрос (берутся из заголовка User-Agent запроса); :http-version — используемая версия протокола HTTP (1.0, 1.1 или 2.0). Все остальные символы, присутствующие в строке формата, переносятся в создаваемую запись журнала без изменений. Пример задания строки формата, которая выведет HTTP-метод, целевой путь, размер тела ответа (из заголовка Content-Length ответа), код статуса и полное время генерирования ответа через пробел: app.use(morgan(':method :url :res[content-length] :status :total-time')); То же самое, только время генерирования будет выводиться с одной цифрой после запятой: app.use(morgan(':method :url :res[content-length] :status ' + ':total-time[1]')); То же самое, только добавляем текущие дату и время в формате web и значение заголовка Accept запроса: app.use(morgan(':method :url :res[content-length] :status ' + ':total-time[1] :date[web] :req[accept]')); 22.2.3. Расширенные инструменты для работы с форматами записей 22.2.3.1. Создание своих предопределенных форматов Можно создать собственный предопределенный формат, описав его в виде строки формата и дав ему произвольное название. Для этого используется функция format(), объявленная в библиотеке и подвергнутая множественному экспорту: format(<название формата>, <строка формата>) Название формата задается в виде строки и должно быть уникальным.
Приложение 7 Описание файлового архива Файловый архив, сопровождающий книгу, доступен по интернет-адресу: https:// zip.bhv.ru/9785977518536.zip и со страницы книги на сайте https://bhv.ru/. Содержимое архива описано в табл. П7.1. Таблица П7.1. Содержимое файлового архива Папка или файл Вложенная папка Описание lesson<номер урока> Папка с результатами выполнения всех практических упражнений, присутствующих в составе урока, с соответствующим номером !sources Папка с исходными материалами, необходимыми для выполнения практических упражнений в текущем уроке data Папка с дампами базы данных console Папка с проектом простейшего консольного приложения конвертера величин, написанного на уроке 1 simple-web Папка с проектом простейшего веб-приложения, написанного на уроке 2 express-web Папка с проектом традиционного веб-приложения списка запланированных дел, разрабатываемого на протяжении уроков 3–16 express-webbackend Папка с проектом бэкенда двухзвенного веб-приложения списка запланированных дел, написанного на уроке 17 react-webfrontend Папка с проектом фронтенда двухзвенного веб-приложения списка запланированных дел, разрабатываемого в течение уроков 18–19 readme.txt Файл с описанием архива и инструкциями по запуску приложений
Предметный указатель $ $group 336 $limit 340 $lookup 342 $match 336, 339 $skip 340 $sort 336, 340 $sortByCount 340 $unwind 343 _ _id 267, 336 A acceptRanges 232 accepts() 98 acceptsLanguages() 99 acknowledged 276, 277, 291, 292 addListener() 69 address() 97 Aggregate 341 aggregate() 335, 341 algorithm 365 algorithms 366 alias 300 aliases 363 all() 106 allow_decimal 185 allow_leading_zeros 183 allow_negative_sign_placeholder 186 allow_negatives 186 allow_space_after_digits 185 allow_space_after_symbol 185 allowHeaders 369 and() 330 any() 228 app 98, 103 append() 101 appname 275 args 543 argv 26 array() 227 as 342 async 85, 131 attachment() 233 author 35 autoCreate 296, 301 autoIndex 296, 301 await 85 B bail() 192 baseUrl 115 Binary 285 body 141 body() 182 BrowserRouter 426 buffer 226, 285 C cache-manager 453 cache-manager-fs-hash 456 caching() 454 case sensitive routing 118 caseSensitive 119, 429, 431 chalk 37 children 397 className 430 clearCookie() 203 clockTolerance 366 closeDelimiter 132 code 225 collection 301, 305 Collection 276 collection() 275 Compass 561 compress 476 compression 457 compression() 457 config() 54 connect() 295 consumeFlash() 215 cookie 208 Cookie 200 ◊ подписанный 201 ◊ сессии 206 cookie() 201 cookie-parser 200 cookieParser() 201 cookies 203 cors 368 cors() 368 countDocuments() 333 create() 456 createContext() 420 createdAt 302 createError() 172 create-react-app 387 createServer() 67 createStream() 475 createUser() 464 createWriteStream() 474 credentials 369 CSRF 460 csrf() 461 csrfToken() 462 CSS-фреймворк 132 current 400 currentTime 302 custom() 189, 452 customSanitizer() 190 D data 33 date 367 db 464 Db 275 db() 275 dbName 296 decimal_digits 184 decimal_separator 185 default 299 default() 190 del() 455 delay 72 delete 145 delete() 145 deletedCount 292, 316 deleteMany() 292, 317 deleteOne() 292, 316 delimiter 132 delimiters 184 dependencies 35, 40 description 35 dest 221 destination 222, 226 destroy() 212 devDependencies 35, 40 digits_after_decimal 186
Предметный указатель 603 dirname() 80 disable() 96, 451 disabled() 96 diskStorage 221 DiskStorage 221 DocumentNotFoundError 313 domain 201 dotenv 54 dotfiles 165, 233 download() 234 E EJS 121 element 428 enable() 95 enabled() 95 encode 203 encoding 226 end 431 end() 67, 102 env 54, 477, 543 equals() 188, 328 Error 301 estimatedDocumentCount() 332 etag 449, 450 exec() 326 exists() 188, 191 exit() 27 expiredAt 366 expires 202 expiresIn 364 expose 173 exposedHeaders 369 express() 95 express-cache-ctrl 451 express-session 206 express-validator 181 ext 72 extended 139 extensions 165 F factor 210 fallbackSessionFn 210 fallthrough 165 fieldname 226 fieldNameSize 224 fields 224 fields() 228 fieldSize 224 file 230 fileExtension 210 fileFilter 221, 225 filename 223, 226 files 224, 230 fileSize 224 FileStore 209 fileURLToPath() 80 filter() 289 find() 285, 331 findById() 325 findByIdAndDelete() 317 findByIdAndUpdate() 315 FindCursor 287 findOne() 278, 324 findOneAndDelete() 317 findOneAndUpdate() 315 flash() 214 flattenObjectIds 363 force_decimal 184 foreignField 342 format 184 format() 102, 471 Fragment 393 fresh 450 from 342 G get 299 GET 62 get() 95, 98, 102, 105, 304, 455 getters 363 GET-параметр 60 gt 183 gt() 329 gte() 329 H hasNext() 288 HEAD 105 head() 105 headerParts 224 headers 76, 171, 172, 232 headersSent 103 helmet 460 helmet() 460 host 75 hostname 98 hourFormat 185 HTTP 59 http-errors 172 httpOnly 202 HTTPS 59 HTTP-метод 62 ◊ допустимый 104 I id 301 if() 192 ignore 72 ignoreExpiration 366 immediate 473 immutable 449 in() 329 includeArrayIndex 343 includeOptionals 194 index 166, 298 index() 303 inflate 363 init 32 insertedCount 277 insertedId 276 insertedIds 277 insertMany() 277, 311 insertOne() 276 install 38, 57 interval 475 ip 98 is() 99 isActive 431 isBoolean() 184 isCreditCard() 188 isCurrency() 185 isDate() 184 isDecimal() 184 isEmail() 186 isEmpty() 193 isFloat() 183 isHexadecimal() 188 isHexColor() 188 isIn() 188 isInt() 183 isMobilePhone() 186 isPassportNumber() 187 isPending 431 isPostalCode() 187 isString() 183 isStrongPassword() 187 isTime() 185 isURL() 186 J join() 80 JSON 32 json escape 361 json() 360, 362 jsonwebtoken 364 JsonWebTokenError 367 JSX 391 K key 396 keywords 35
604 Предметный указатель L lastModified 449 legacyWatch 73 level 192 license 35 limit 140, 287, 362 limit() 288, 332 limits 221, 224 Link 429 listen() 67, 96 locale 183, 184, 186–188 localField 342 locals 128 location 189 locations 195 logFn 210 loose 184 lowercase 300 lt 183 lt() 328 lte() 328 ltrim() 190 M main 35 mapped() 193 matchedCount 291 mathedData() 194 max 183, 454 maxAge 202, 366, 370, 449 maxCount 228 maxFiles 475 maxsize 456 maxSize 476 maxTimeout 209 mdel() 456 memoryStorage 223 MemoryStorage 207, 223 mergeParams 117, 119 MERN 16 message 172 meta 80 method 97 method() 347 method-override 146 methodOverride() 146 methods 112, 347, 369 mget() 455 mimetype 226 MIME-тип 98 min 183 minLength 187 minLowerCase 187 minNumbers 187 minSymbols 187 minTimeout 209 minUpperCase 187 mode 185 Model 305 model() 305 modifiedCount 291 module 80 MongoClient 275 MongoDB 266 MongoDB Compass 561 MongoDB Shell 558 Mongoose 295 Mongosh 558 morgan 468 morgan() 468, 473 mountpath 120 mset() 455 msg 193 multer 220 multer() 220 MulterError 225, 226, 228 mustRevalidate 451 N name 34, 208, 228, 542 Navigate 431 NavLink 430 ne() 328 negative_sign_after_digits 186 negative_sign_before_digits 186 next() 288 nin() 329 nodemon 69, 71 nodemonConfig 73 none() 228 nor() 330 not() 191 notBefore 365 NotBeforeError 367 notEmpty() 183 noTransform 452 npm 29 npx 387 O ObjectId 267, 280 on() 69 onlyValidData 195 openDelimiter 131 OPTION 105 option() 105 optionsSuccessStatus 370 or() 330 origin 368 originalname 226 originalUrl 97 ORM 295 output 338 P param() 197, 198 parameterLimit 140 params 111 parens_for_negatives 186 parts 224 PATCH 145, 146 patch() 145 path 97, 112, 189, 202, 209, 226, 343, 428, 456, 475 pathname 76 pbkdf2() 243 pbkdf2Sync() 244 port 97 POST 62 post() 105 Postman 583 POST-параметр 63 preflightContinue 370 preserveNullAndEmptyArrays 343 preventScrollReset 430 priority 202 private() 451 process 26 program 542 projection 284 projection() 330 promisify() 246 protocol 98 provider 188 Provider 421 proxyRevalidate 452 public() 452 PUT 145, 146 put() 145 Q query 141, 348 Query 326 query parser 138 query() 182 R randomBytes() 244 React 383 React Router 426 readFile() 80 readFileSync() 91 reapAsync 209 reapInterval 209 reapSyncFallback 209 redirect 166 redirect() 100 ref 400
Предметный указатель 605 regenerate() 212 regex() 328 reload() 212 reloadDocument 430 render() 127 replace 429 req 103, 189 request 67, 542 require_decimal 186 require_symbol 185 res 98 resave 207 REST 357 Result 193 retries 209 returnDocument 315 rewind() 288 rolling 207 root 232 rotating-file-stream 474 route 112 Route 428 route() 106 Router 114 Router() 119 Routes 427 rtrim() 190 run 55 S sameSite 202 save() 211, 310, 312 saveUninitialized 207 Schema 301 Scheme 297 scope 452 scripts 35, 55 secret 207 secure 98, 202 secure() 451 select() 330 send() 100 sendFile() 232 sendStatus() 102 session 211 Session 211 session() 207 session-file-store 209 sessionKeyName 214 set 299 set() 95, 102, 304, 455 setHeader() 67 setHeaders 166 sign() 364 signed 201 signedCookies 203 single() 227 size 226, 475 skip 287, 473 skip() 288, 332 skipFiles 542 sort 286 sort() 288, 331 sortBy 338 stack 112 stale 450 state 429, 433 static() 164, 348 staticMiddleware() 164 statics 348 status 171, 172 status() 100 statusCode 77, 103, 171, 172 statusMessage 103 stdout 473 storage 221 store 207 stream 473 strict 119, 301, 315, 362 strict routing 119 strictMode 185, 187 StrictModeError 301 strictQuery 301 sttl 452 style 431 subdirs 456 symbol 185 symbol_after_digits 185 T TCP 60 TCP-порт 60 thousand_separator 185 timestamps 302, 311, 315 timingSafeEqual() 245 tiny-csrf 461 to 429 toArray() 288 toBoolean() 190 toDate() 190 toFloat() 190 toInt() 190 toJSON() 363 token() 472 TokenExpiredError 366 toLowerCase() 190 toUpperCase() 190 trim 300 trim() 190 ttl 209, 454 type 33, 35, 297, 542 type() 100 Types 297 U uninstall 41 unset 208 update 41 updatedAt 302 updateMany() 291, 316 updateOne() 289, 314 uppercase 300 url 75, 80, 97 URL 75 urlencoded() 139 URL-параметр 108 use() 115, 156, 157, 164 useContext() 421 useEffect() 401 useLayoutEffect() 403 useLocation() 433 useNavigate() 432 useParams() 432 useRef() 400 useState() 397 V validationResult() 193 value 421 values 188, 191 verify() 365 version 35 VersionError 313 versionKey 301, 363 view cache 453 view engine 125 views 125 virtual() 303 virtuals 304, 363 VirtualType 303 Visual Studio Code 494 VSC 494 W watch 72 where() 327, 328 withMessage() 191 writeFile() 147 WriteStream 474 X xhr 361 x-powered-by 95 Z zip 457
606 Предметный указатель А Авторизация 241 Агрегатное вычисление 334 Адрес хоста 59 Атрибут 32, 267 ◊ виртуальный 303 ◊ индексируемый 273 Аутентификация 241 ◊ жетонная 359 Б База данных 78, 267 Бандл 386 Бэкенд 356 В Валидация 180 Веб-приложение 65 ◊ двухзвенное 356 ◊ многопользовательское 242 ◊ однозвенное 355 ◊ прогрессивное 388 ◊ традиционное 355 Веб-сайт 64 ◊ динамический 65 ◊ сверхдинамический 357 ◊ статический 65 Веб-сервер 59 Веб-фреймворк 89 Версия ◊ исправленная 35 ◊ обновленная 36 ◊ полностью новая 36 Вкладка активная 511 Включение 129 Внутренние данные 240 Восстановление проекта 57 Временная отметка 79 Всплывающее сообщение 212 Встраивание 269 Вход 241 Вывод 23 Выполнение клиентского запроса 314 Выражение текущее 537 Выход 241 Г Геттер 299 Главная область 502, 563, 586 Гость 240 Группировка 334 Д Дамп 580 Документ 32, 267 ◊ вторичный 269 ◊ первичный 269 Ж Жетон ◊ защиты 461 ◊ пользователя 359 ◊ предъявителя 359 Журнал 468 Журналирование 468 З Зависимость 29 ◊ времени выполнения 29, 35, 38, 57 ◊ времени разработки 29, 35, 38, 57 Заголовок ◊ запроса 63 ◊ ответа 64 Запись журнала 468 И Импорт 41, 580 ◊ гибридный 46 ◊ множественный 45 ◊ по умолчанию 44 Имя регистрационное 240 Индекс 273 ◊ простой 274 ◊ составной 274 Инструмент ◊ высокоуровневый 317 ◊ низкоуровневый 317 Интерактивный режим 24 Интернет-адрес файловый 80 К Карточка 135 Кеш 447 Кеширование 447 ◊ на стороне клиента 447 ◊ на стороне сервера 447 Кешированная копия 447 Клиент 58 Клиентская библиотека MongoDB 274 Клиентский запрос 62 ◊ межсайтовый 367 ◊ проверочный 367 Ключ 23, 396 Кнопка ◊ гамбургер 501 ◊ дополнительных действий 515 Код ◊ завершения 26 ◊ статуса 64 Коллекция 267 ◊ обслуживаемая 294 Командный ключ 23 Коммутатор 426 Компиляция 28 Компонент 384 ◊ главный 384, 388 ◊ дочерний 384 ◊ потомок 384 ◊ родитель 384 ◊ родительский 384 ◊ экран 384 Конвейер агрегатного вычисления 334 Консоль 23 Консольное приложение 23 Конструирование запроса 326 Контекст 420 ◊ шаблона 121 Контроллер 74 ◊ цепочка 110 Конфигурация отладки 541 Курсор 287 Л Литерал 525 Логин 240 Локаль 183 М Манифест проекта 29 Маршрут 104, 426 ◊ параметризованный 108 ◊ совпавший 105 Маршрутизатор 74, 426 ◊ вложенный 116 ◊ встроенный 104 ◊ выделенный 114 Маршрутизация 74, 426 Машинный код 28 Меню ◊ действий 566 ◊ навигации 135 ◊ настроек боковой панели 508
Предметный указатель 607 Мини-карта 546 Модель 78 ◊ объектная 294 Модификатор 191 Модуль 25 ◊ встроенный 48 ◊ стартовый 26 Монтирование 385 Н Навигация 382 Нагрузка 85, 420 Нижняя область 503 Номер версии 35 О Область ◊ боковой панели 502 ◊ заголовка 585 Обновление 385 Обозначение бренда 135 Обработчик ошибок 174 ◊ по умолчанию 174 Обработчик события 69 Объект простой 32 Объектный идентификатор 267 Окно приветствия 562 Окружение 49 Описание статуса 64 Отклонение 85 Очередь задач 69 Очиститель 190 Ошибка ◊ 404 64 ◊ времени выполнения 525 ◊ времени компиляции 28, 524 П Пакет 29 ◊ библиотек 383 Палитра 509 ◊ команд 544 Панель ◊ боковая 502, 586 ◊ боковая основная 502 ◊ действий 501 ◊ инструментов вкладки 503 области боковой панели 518 ◊ информационная 563 ◊ истории 586 ◊ клиентского запроса 587 ◊ навигации 563 ◊ серверного ответа 587 Папка ◊ корневая 64 ◊ проекта 25 Параметр строки запуска 23 Перекрытие HTTP-метода 146 Переменная окружения 49 ◊ пользовательская 50 ◊ сеансовая 49 ◊ системная 53 ◊ файловая 49 Переменная среды 49 Перенаправление 100 ◊ временное 101 ◊ постоянное 101 Поддокумент 33 Подсказка по коду 523 Подтверждение 85 Подъем данных 386 Поиск 272 Пользователь ◊ зарегистрированный 240 ◊ текущий 241 Посредник 155 Поток 85, 473 Пошаговое выполнение 537 Правило валидации 182 Право пользователя 463 Привилегия пользователя 463 Приложение вложенное 119 Провайдер контекста 420 Прогон 48 Проект 25 Прокси-сервер 447 Промис 85 Промисификация 246 Проп 385 Прослушивание 67 Протокол 59 Путь 60 ◊ текущий 430 ◊ шаблонный 104 Р Развертывание 483 Разворачивание массива 343 Разграничение доступа 240 Размонтирование 401 Расширение 503 Реактивные данные 385 Регистрация 241 Реестр проекта 40 Режим работы ◊ отладочный 477 ◊ эксплуатационный 477 Рендеринг 121, 385 ◊ первоначальный 385 ◊ повторный 385 Репозиторий 36 Ресурс 58 Реф 400 Роль пользователя 463 С Сборщик 386 Связка 386 Связывание 271 Сеанс 49 Секция главной области 511 ◊ вложенная 512 Сервер 59 Серверная сессия 206 Серверный ответ 63 ◊ пустой 64 Сессия 206 Сеттер 299 Снимок дерева зависимостей 40 Событие 68 Содержимое компонента 384 Соединение 564 Соль 243 Состояние 385 Список ◊ быстрого выбора 522 ◊ пользователей 240 Спуск данных 386 Среда 49 Ссылка на атрибут 336 Стадия агрегатного вычисления 334 ◊ выборки части групп 335 ◊ разворачивания массива 343 ◊ связывания документов 341 ◊ сортировки групп 335 ◊ сортировки документов 334 ◊ фильтрации групп 335 ◊ фильтрации документов 334 ◊ формирования групп 334 Стек вызовов 539 Страница приветствия 502 Строка ◊ запуска 23 ◊ текущая 522 СУБД 265 ◊ документная 268 ◊ серверная 266 Суперадминистратор 463 Схема 296 Сценарий проекта 55
608 Предметный указатель Т Таблица стилей ◊ компонента 388 ◊ проекта 388 Тег компонента 406 Тело ◊ запроса 63 ◊ ответа 64 Тема ◊ значков 551 ◊ значков продукта 551 ◊ значков файлов 551 Терминал 533 Точка ◊ входа 37 ◊ монтирования 115 ◊ останова 535 Трассировка 537 Ф Фабрика ◊ классов 181 ◊ объектов 220 ◊ функций 140 Файл ◊ окружения 49 ◊ статический 163 Файл журнала 468 ◊ архивный 474 ◊ рабочий 474 Фильтрация 272 Фрагмент 393 Фреймворк 89 Фронтенд 356 ◊ одностраничный 382 Функция ◊ асинхронная 84 ◊ компонента 389 ◊ обратного вызова 86 ◊ синхронная 83 Х Хеш 242 Хеширование 242 Хост 59 ◊ клиентский 59 ◊ локальный 62 ◊ серверный 59 Хук 401 Ц Цветовая схема 550 Ш Шаблон 121, 525 Шаблонизатор 121 Шаг ◊ с выходом 538 ◊ с заходом 538 ◊ с обходом 538 Э Экземпляр компонента 384 Экран 382, 563 ◊ главный 382 Экспорт 41, 580 ◊ гибридный 44 ◊ множественный 42 ◊ по умолчанию 42 Я Якорь 61