Справочник
- объекты nginx
- HTTP-запрос
- Сеанс Stream
- Периодический сеанс
- Заголовки
- Запрос
- Ответ
- ngx
- ngx.shared
- встроенные объекты
- console
- crypto
- CryptoKey
- CryptoKeyPair
- njs
- process
- String
- веб-API
- Декодер текста
- Кодировщик текста
- таймеры
- Глобальные функции
- встроенные модули
- Buffer
- Crypto
- Файловая система
- Строка запроса
- XML
- zlib
njs предоставляет объекты, методы и свойства для расширения функциональности nginx.
В этом справочнике описаны только специфичные для njs свойства, методы и модули, не соответствующие ECMAScript. Определения свойств и методов njs, соответствующих ECMAScript, приведены в спецификации ECMAScript. Список всех свойств и методов njs приведён в разделе Совместимость.
Объекты nginx
HTTP-запрос
Объект HTTP-запроса доступен только в модуле ngx_http_js_module. До версии 0.8.5 все строковые свойства объекта были байтовыми строками.
r.args{}- объект аргументов запроса, доступный только для чтения.
Строка запроса возвращается в виде объекта. Начиная с версии 0.7.6, повторяющиеся ключи возвращаются в виде массива; ключи чувствительны к регистру, а ключи и значения декодируются из процентного кодирования.
Например, строка запроса
'a=1&b=%32&A=3&b=4&B=two%20words'
преобразуется в
r.argsследующим образом:{a: "1", b: ["2", "4"], A: "3", B: "two words"}Более сложные сценарии разбора можно реализовать с помощью модуля Строка запроса и переменной
$args, например:import qs from 'querystring'; function args(r) { return qs.parse(r.variables.args); }Объект аргументов вычисляется при первом обращении к
r.args. Если нужен только один аргумент, напримерfoo, можно использовать переменные nginx:r.variables.arg_foo
В этом случае объект переменных nginx возвращает первое значение для заданного ключа, без учёта регистра и без декодирования процентного кодирования.
Для обратного преобразования
r.argsв строку можно использовать методstringifyмодуля Query String. r.decline()- указывает обработчику js_access, что он не выносит решения о доступе, и передаёт его другим средствам проверки доступа в соответствии с директивой
satisfy any(0.9.9). Обработчик, завершившийся без вызоваr.decline()илиr.return(), неявно предоставляет доступ. Может вызываться только из функции js_access. r.done()- после вызова этой функции следующие фрагменты данных будут передаваться клиенту без вызова js_body_filter (0.5.2). Может вызываться только из функции js_body_filter
r.error(string)- записывает
stringв журнал ошибок с уровнем логированияerrorПоскольку в nginx имеется жёстко заданное ограничение максимальной длины строки, в журнал можно записать только первые 2048 байт строки.
r.finish()- завершает отправку ответа клиенту
r.headersIn{}- объект входящих заголовков, доступный только для чтения.
Доступ к заголовку запроса
Fooможно получить с помощью синтаксиса:headersIn.fooилиheadersIn['Foo'].Заголовки запросов “Authorization”, “Content-Length”, “Content-Range”, “Content-Type”, “ETag”, “Expect”, “From”, “Host”, “If-Match”, “If-Modified-Since”, “If-None-Match”, “If-Range”, “If-Unmodified-Since”, “Max-Forwards”, “Proxy-Authorization”, “Referer”, “Transfer-Encoding” и “User-Agent” могут иметь только одно значение поля (0.4.1). Повторяющиеся значения полей в заголовках “Cookie” разделяются точкой с запятой (
;). Повторяющиеся значения полей во всех остальных заголовках запросов разделяются запятыми. r.headersOut{}- объект исходящих заголовков основного запроса, доступный для записи.
Если
r.headersOut{}— объект ответа подзапроса, он представляет заголовки ответа. В этом случае значения полей заголовков ответа “Accept-Ranges”, “Connection”, “Content-Disposition”, “Content-Encoding”, “Content-Length”, “Content-Range”, “Date”, “Keep-Alive”, “Server”, “Transfer-Encoding” и “X-Accel-*” могут отсутствовать.Доступ к заголовку ответа “Foo” можно получить с помощью синтаксиса:
headersOut.fooилиheadersOut['Foo'].Исходящие заголовки следует задавать до отправки заголовка ответа клиенту, иначе обновление заголовка будет проигнорировано. Это означает, что
r.headersOut{}доступно для записи только в следующих случаях:- в обработчике js_content до вызова
r.sendHeader()илиr.return() - в обработчике js_header_filter
Значения полей заголовков ответов с несколькими значениями (0.4.0) можно задать с помощью синтаксиса:
r.headersOut['Foo'] = ['a', 'b']
в результате чего будет выведено:
Foo: a Foo: b
Все предыдущие значения поля заголовка ответа “Foo” будут удалены.
Для стандартных заголовков ответа, допускающих только одно значение поля, например “Content-Type”, учитывается только последний элемент массива. Значения полей заголовка ответа “Set-Cookie” всегда возвращаются в виде массива. Повторяющиеся значения полей в заголовках ответа “Age”, “Content-Encoding”, “Content-Length”, “Content-Type”, “ETag”, “Expires”, “Last-Modified”, “Location” и “Retry-After” игнорируются. Повторяющиеся значения полей во всех остальных заголовках ответа разделяются запятыми.
- в обработчике js_content до вызова
r.httpVersion- версия HTTP, доступна только для чтения
r.internal- логическое значение: true для внутренних location
r.internalRedirect(uri)- выполняет внутреннее перенаправление на указанный
uri. Если URI начинается с префикса “@”, он считается именованным location. В новом location обработка запроса повторяется с этапа NGX_HTTP_SERVER_REWRITE_PHASE для обычных location и с этапа NGX_HTTP_REWRITE_PHASE для именованных location. В результате при перенаправлении на именованный location ограничение client_max_body_size не проверяется. Дополнительные сведения см. в руководстве для разработчиков. Перенаправленные запросы становятся внутренними и могут обращаться к внутренним location. Фактическое перенаправление происходит после завершения выполнения обработчика.После перенаправления в целевом location запускается новая виртуальная машина njs, а виртуальная машина в исходном location останавливается. Значения переменных nginx сохраняются и могут использоваться для передачи информации в целевой location. Начиная с версии 0.5.3, можно использовать переменную, объявленную директивой
js_varдля http или stream.Начиная с версии 0.7.4, метод принимает экранированные URI.
r.log(string)- записывает
stringв журнал ошибок с уровнем логированияinfoПоскольку в nginx имеется жёстко заданное ограничение максимальной длины строки, в журнал можно записать только первые 2048 байт строки.
r.method- метод HTTP, доступен только для чтения
r.parent- ссылка на объект родительского запроса
r.remoteAddress- адрес клиента, доступен только для чтения
r.readRequestArrayBuffer()- возвращает
Promise, который разрешается телом запроса клиента в видеArrayBuffer(0.9.9). Сведения о доступности, кэшировании тела и семантике параллельных вызовов см. в описанииr.readRequestText(). r.readRequestForm([options])- считывает тело запроса клиента и разбирает его как HTML-форму, возвращая
Promise, который разрешается объектом формы (0.9.9). Поддерживаются типы содержимогоapplication/x-www-form-urlencodedиmultipart/form-data.Объект формы предоставляет следующие методы:
get(name)- возвращает первое значение для
nameилиnull, если оно отсутствует. getAll(name)- возвращает массив со всеми значениями для
name. has(name)- возвращает
true, если дляnameсуществует хотя бы одна запись. forEach(callback[, thisArg])- вызывает
callbackдля каждой записи с аргументами(value, key, form). hasFiles()- возвращает
true, если форма содержит какие-либо части с файлами.
Значения текстовых полей — декодированные строки. Для частей с файлами значением является объект, свойство
nameкоторого содержит имя файла, указанное клиентом; содержимое файла недоступно. Имя файла указывает клиент, оно не проходит очистку.Необязательный объект
optionsпринимает следующие свойства:-
maxKeysnumber - максимальное количество полей для разбора; по умолчанию —
128. При превышении ограничения возвращённый промис отклоняется.
Сведения о доступности, кэшировании тела и семантике параллельных вызовов см. в описании
r.readRequestText(). Разобранная форма кэшируется непосредственно в запросе: последующий вызов возвращает тот же объект формы и игнорирует новый аргументoptions. r.readRequestJSON()- возвращает
Promise, который разрешается телом запроса клиента, разобранным как JSON (0.9.9). Сведения о доступности, кэшировании тела и семантике параллельных вызовов см. в описанииr.readRequestText(). r.readRequestText()- возвращает
Promise, который разрешается телом запроса клиента в виде строки (0.9.9). Размер тела запроса ограничен директивой client_max_body_size. Метод доступен в директивах js_access и js_content.Тело считывается один раз и кэшируется в запросе: последующие вызовы
r.readRequestText(),r.readRequestArrayBuffer(),r.readRequestJSON()илиr.readRequestForm()используют кэшированное тело, не считывая его повторно из сетевого потока. Второй вызов, сделанный до завершения предыдущего чтения, вызывает исключение"request body is already being read".Обратите внимание, что байты, недопустимые в кодировке UTF-8, могут быть преобразованы в символ замены.
r.requestBody- свойство признано устаревшим в версии 0.5.0 и удалено в версии 0.8.0. Вместо него следует использовать свойство
r.requestBufferилиr.requestText. r.requestBuffer- тело запроса клиента, если оно не было записано во временный файл (начиная с версии 0.5.0). Чтобы тело запроса клиента находилось в памяти, его размер должен быть ограничен директивой client_max_body_size, а с помощью директивы client_body_buffer_size необходимо задать буфер достаточного размера. Свойство доступно только в директиве js_content. Для асинхронного доступа или использования в js_access см.
r.readRequestText()и другие методы «r.readRequest*()». r.requestText- аналогично
r.requestBuffer, но возвращаетstring. Обратите внимание, что байты, недопустимые в кодировке UTF-8, могут быть преобразованы в символ замены. Для асинхронного доступа или использования в js_access см.r.readRequestText(). r.rawHeadersIn[]- возвращает массив пар «ключ — значение» в точности в том виде, в котором они были получены от клиента (0.4.1).
Например, для следующих заголовков запроса:
Host: localhost Foo: bar foo: bar2
результат
r.rawHeadersInбудет следующим:[ ['Host', 'localhost'], ['Foo', 'bar'], ['foo', 'bar2'] ]Все заголовки
fooможно получить с помощью синтаксиса:r.rawHeadersIn.filter(v=>v[0].toLowerCase() == 'foo').map(v=>v[1])
результат будет следующим:
['bar', 'bar2']
Имена полей заголовков не преобразуются в нижний регистр, повторяющиеся значения полей не объединяются.
r.rawHeadersOut[]- возвращает массив пар «ключ — значение» для заголовков ответа (0.4.1). Имена полей заголовков не преобразуются в нижний регистр, повторяющиеся значения полей не объединяются.
r.responseBody- свойство признано устаревшим в версии 0.5.0 и удалено в версии 0.8.0. Вместо него следует использовать свойство
r.responseBufferилиr.responseText. r.responseBuffer- содержит тело ответа подзапроса, доступное только для чтения (начиная с версии 0.5.0). Размер
r.responseBufferограничен директивой subrequest_output_buffer_size. r.responseText- аналогично
r.responseBuffer, но возвращает строку (начиная с версии 0.5.0). Обратите внимание, что байты, недопустимые в кодировке UTF-8, могут быть преобразованы в символ замены. r.return(status[, string | Buffer])- отправляет клиенту весь ответ с указанным
status. Ответ может быть строкой или Buffer (0.5.0).Может вызываться из обработчика js_content или, начиная с версии 0.9.9, из обработчика js_access.
В качестве второго аргумента можно указать URL перенаправления (для кодов 301, 302, 303, 307 и 308) или текст тела ответа (для остальных кодов).
r.send(string | Buffer)- отправляет клиенту часть тела ответа. Отправляемые данные могут быть строкой или Buffer (0.5.0)
r.sendBuffer(data[, options])- добавляет данные в цепочку фрагментов данных для передачи следующему фильтру тела (0.5.2). Фактическая передача происходит позже, после обработки всех фрагментов данных текущей цепочки.
Данные могут быть строкой или Buffer.
options— объект, используемый для переопределения флагов буфера nginx, полученных из буфера входящего фрагмента данных. Можно переопределить следующие флаги:last- логическое значение: true, если это последний буфер
flush- логическое значение: true, если буфер должен иметь флаг
flush
r.sendHeader()- отправляет HTTP-заголовки клиенту
r.setReturnValue(value)- задаёт возвращаемое значение обработчика js_set (0.7.0). В отличие от обычного оператора return, этот метод следует использовать, если обработчик является асинхронной функцией JS. Например:
async function js_set(r) { const digest = await crypto.subtle.digest('SHA-256', r.headersIn.host); r.setReturnValue(digest); } r.status- статус, доступен для записи
r.subrequest(uri[, options[, callback]])- создаёт подзапрос с указанными
uriиoptions, а также устанавливает необязательный обработчик завершенияcallback.Подзапрос использует те же входящие заголовки, что и запрос клиента. Чтобы отправить проксируемому серверу заголовки, отличные от исходных, можно использовать директиву proxy_set_header. Чтобы отправить проксируемому серверу полностью новый набор заголовков, можно использовать директиву proxy_pass_request_headers.
Если
optionsявляется строкой, она содержит строку аргументов подзапроса. В противном случаеoptionsдолжен быть объектом со следующими ключами:args- строка аргументов; по умолчанию используется пустая строка
body- тело запроса; по умолчанию используется тело запроса родительского объекта запроса
method- метод HTTP; по умолчанию используется метод
GET detached- логический флаг (0.3.9): если
true, созданный подзапрос является отсоединённым. Ответы на отсоединённые подзапросы игнорируются. В отличие от обычных подзапросов, отсоединённый подзапрос можно создать внутри обработчика переменной. Флагdetachedи аргумент обратного вызова нельзя использовать одновременно.
Обработчик завершения
callbackполучает объект ответа подзапроса с методами и свойствами, идентичными объекту родительского запроса.Начиная с версии 0.3.8, если
callbackне указан, возвращается объектPromise, который разрешается объектом ответа подзапроса.Например, чтобы просмотреть все заголовки ответа в подзапросе:
async function handler(r) { const reply = await r.subrequest('/path'); for (const h in reply.headersOut) { r.log(`${h}: ${reply.headersOut[h]}`); } r.return(200); } r.uri- текущий URI запроса, нормализованный, доступен только для чтения
r.rawVariables{}- переменные nginx в виде Buffer, доступны для записи (начиная с версии 0.5.0)
r.jsVarNames([prefix])- возвращает новый массив имён переменных nginx, объявленных директивой js_var (начиная с версии 0.9.9). Необязательный аргумент
prefixдолжен быть строкой. Если он указан, возвращаются только имена, начинающиеся с этого префикса. r.variables{}- объект переменных nginx, доступный для записи (начиная с версии 0.2.8).
Например, чтобы получить переменную
$foo, можно использовать один из следующих вариантов синтаксиса:r.variables['foo'] r.variables.foo
Начиная с версии 0.8.6, к захватам регулярного выражения можно обращаться с помощью следующего синтаксиса:
r.variables['1'] r.variables[1]
nginx по-разному обрабатывает переменные, на которые есть ссылки в
nginx.conf, и переменные, на которые ссылок нет. При наличии ссылки значение переменной может кэшироваться, а при её отсутствии оно никогда не кэшируется. Например, если переменная $request_id используется только из njs, при каждом вычислении она получает новое значение. Но если на $request_id есть ссылка, например:proxy_set_header X-Request-Id $request_id;
r.variables.request_idкаждый раз возвращает одно и то же значение.Переменная доступна для записи, если:
- она создана с помощью директивы
js_varдля http или stream (начиная с версии 0.5.3) - на неё есть ссылка в файле конфигурации nginx
Тем не менее некоторым встроенным переменным по-прежнему нельзя присвоить значение (например,
$http_). - она создана с помощью директивы
r.warn(string)- записывает
stringв журнал ошибок с уровнем логированияwarningПоскольку в nginx имеется жёстко заданное ограничение максимальной длины строки, в журнал можно записать только первые 2048 байт строки.
Сеанс Stream
Объект сеанса stream доступен только в модуле ngx_stream_js_module. До версии 0.8.5 все строковые свойства объекта были байтовыми строками.
s.allow()- псевдоним для
s.done(0)(0.2.4) s.decline()- псевдоним для
s.done(-5)(0.2.4) s.deny()- псевдоним для
s.done(403)(0.2.4) -
s.done([code]) - задаёт код
codeдля обработчика текущей фазы, по умолчанию —0. Фактическое завершение происходит после выполнения обработчика js и обработки всех ожидающих событий, например, отngx.fetch()илиsetTimeout()(0.2.4).Возможные значения кода:
-
0— успешное завершение, передача управления следующей фазе -
-5— решение не принято, передача управления следующему обработчику текущей фазы (если он есть) -
403— доступ запрещён
js_accessилиjs_preread. -
s.error(string)- записывает переданное
stringв журнал ошибок на уровне логированияerrorПоскольку в nginx установлен жёстко заданный максимальный предел длины строки, в журнал можно записать только первые 2048 байт строки.
s.log(string)- записывает переданное
stringв журнал ошибок на уровне логированияinfoПоскольку в nginx установлен жёстко заданный максимальный предел длины строки, в журнал можно записать только первые 2048 байт строки.
s.off(eventName)- отменяет регистрацию обратного вызова, заданного методом s.on() (0.2.4)
s.on(event, callback)- регистрирует
callbackдля указанногоevent(0.2.4).eventможет быть одной из следующих строк:upload- новые данные (строка) от клиента
download- новые данные (строка) клиенту
upstream- новые данные (Buffer) от клиента (начиная с версии 0.5.0)
downstream- новые данные (Buffer) клиенту (начиная с версии 0.5.0)
Обратный вызов завершения имеет следующий прототип:
callback(data, flags), гдеdata— строка или Buffer (в зависимости от типа события), аflags— объект со следующими свойствами:last- логическое значение: true, если это последний буфер данных.
s.remoteAddress- адрес клиента, только для чтения
s.rawVariables- переменные nginx в виде Buffer, доступны для записи (начиная с версии 0.5.0)
s.jsVarNames([prefix])- возвращает новый массив имён переменных nginx, объявленных директивой js_var (начиная с версии 0.9.9). Необязательный аргумент
prefixдолжен быть строкой. Если он указан, возвращаются только имена, начинающиеся с заданного префикса. s.send(data[, options])- добавляет данные в цепочку фрагментов данных, которые будут переданы в прямом направлении: в обратном вызове загрузки — клиенту, при отправке — вышестоящему серверу (0.2.4). Фактическая передача происходит позже, после обработки всех фрагментов данных текущей цепочки.
Данные могут быть строкой или Buffer (0.5.0).
options— объект, используемый для переопределения флагов буфера nginx, унаследованных от буфера входящего фрагмента данных. Флаги можно переопределить следующими флагами:last- логическое значение: true, если буфер является последним
flush- логическое значение: true, если для буфера должен быть установлен флаг
flush
s.sendDownstream()- идентичен s.send(), но всегда отправляет данные клиенту (начиная с версии 0.7.8).
s.sendUpstream()- идентичен s.send(), но всегда отправляет данные от клиента (начиная с версии 0.7.8).
s.status- код состояния сеанса, псевдоним переменной
$status, только для чтения (начиная с версии 0.5.2) s.setReturnValue(value)- задаёт возвращаемое значение обработчика js_set (0.7.0). В отличие от обычного оператора return, этот метод следует использовать, если обработчик является асинхронной функцией JS. Например:
async function js_set(r) { const digest = await crypto.subtle.digest('SHA-256', r.headersIn.host); r.setReturnValue(digest); } s.variables{}- объект переменных nginx, доступен для записи (начиная с версии 0.2.8). Переменная доступна для записи, только если на неё есть ссылка в файле конфигурации nginx. При этом некоторым встроенным переменным по-прежнему нельзя присвоить значение.
s.warn(string)- записывает переданное
stringв журнал ошибок на уровне логированияwarningПоскольку в nginx установлен жёстко заданный максимальный предел длины строки, в журнал можно записать только первые 2048 байт строки.
Периодический сеанс
PeriodicSession.rawVariables{} |
PeriodicSession.variables{} |
Объект Periodic Session передаётся первым аргументом обработчику js_periodic для http и stream (начиная с версии 0.8.1).
PeriodicSession.rawVariables{}- переменные nginx в виде Buffer, доступны для записи.
PeriodicSession.variables{}- объект переменных nginx, доступен для записи.
Заголовки
Headers() |
Headers.append() |
Headers.delete() |
Headers.get() |
Headers.getAll() |
Headers.forEach() |
Headers.has() |
Headers.set() |
Интерфейс Headers для Fetch API доступен начиная с версии 0.5.1.
Новый объект Headers можно создать с помощью конструктора Headers() (начиная с версии 0.7.10):
Headers([init])-
init- Объект с HTTP-заголовками для предварительного заполнения объекта
Headers; это может бытьstring,arrayпар «имя-значение» или существующий объектHeaders.
Новый объект Headers можно создать со следующими свойствами и методами:
append()- Добавляет новое значение к существующему заголовку в объекте
Headersили добавляет заголовок, если он ещё не существует (начиная с версии 0.7.10). delete()- Удаляет заголовок из объекта
Headers(начиная с версии 0.7.10). get()- Возвращает строку со значениями всех заголовков с указанным именем, разделёнными запятой и пробелом.
getAll(name)- Возвращает массив со значениями всех заголовков с указанным именем.
forEach()- Выполняет заданную функцию один раз для каждой пары «ключ-значение» в объекте
Headers(начиная с версии 0.7.10). has()- Возвращает логическое значение, указывающее, существует ли заголовок с указанным именем.
set()- Задаёт новое значение для существующего заголовка в объекте
Headersили добавляет заголовок, если он ещё не существует (начиная с версии 0.7.10).
Запрос
Request() |
Request.arrayBuffer() |
Request.bodyUsed |
Request.cache |
Request.credentials |
Request.headers |
Request.json() |
Request.method |
Request.mode |
Request.text() |
Request.url |
Интерфейс Request для Fetch API доступен начиная с версии 0.7.10.
Новый объект Request можно создать с помощью конструктора Request():
Request[resource[, options]])- Создаёт объект
Requestдля выполнения запроса, который позднее можно передать вngx.fetch().resourceможет быть URL или существующим объектомRequest.options— необязательный аргумент, который должен быть объектом со следующими ключами:body- Тело запроса; по умолчанию пустое.
headers- Объект заголовков ответа — объект с HTTP-заголовками для предварительного заполнения объекта
Headers; это может бытьstring,arrayпар «имя-значение» или существующий объектHeaders. method- Метод HTTP; по умолчанию используется метод GET.
Новый объект Request можно создать со следующими свойствами и методами:
arrayBuffer()- Возвращает
Promise, которое разрешается значениемArrayBuffer. bodyUsed- Логическое значение:
true, если тело было использовано в запросе. cache- Содержит режим кэширования запроса.
credentials- Содержит учётные данные запроса; по умолчанию —
same-origin. headers- Связанный с
RequestобъектHeaders, доступный только для чтения. json()- Возвращает
Promise, которое разрешается результатом разбора тела запроса как JSON. method- Содержит метод запроса.
mode- Содержит режим запроса.
text()- Возвращает
Promise, которое разрешается строковым представлением тела запроса. url- Содержит URL запроса.
Ответ
Response() |
Response.arrayBuffer() |
Response.bodyUsed |
Response.headers |
Response.json() |
Response.ok |
Response.redirected |
Response.status |
Response.statusText |
Response.text() |
Response.type |
Response.url |
Интерфейс Response доступен начиная с версии 0.5.1.
Новый объект Response можно создать с помощью конструктора Response() (начиная с версии 0.7.10):
Response[body[, options]])- Создаёт объект
Response.body— необязательный аргумент, который может бытьstringилиbuffer; по умолчанию —null.options— необязательный аргумент, который должен быть объектом со следующими ключами:headers- Объект заголовков ответа — объект с HTTP-заголовками для предварительного заполнения объекта
Headers; это может бытьstring,arrayпар «имя-значение» или существующий объектHeaders. status- Код состояния ответа.
statusText- Сообщение состояния, соответствующее коду состояния.
Новый объект Response() можно создать со следующими свойствами и методами:
arrayBuffer()- Читает поток
Responseдо конца. ВозвращаетPromise, которое разрешается значениемArrayBuffer. bodyUsed- Логическое значение:
true, если тело было прочитано. headers- Связанный с
ResponseобъектHeaders, доступный только для чтения. json()- Читает поток
Responseдо конца. ВозвращаетPromise, которое разрешается результатом разбора текста тела как JSON. ok- Логическое значение:
true, если ответ успешен (коды состояния в диапазоне 200–299). redirected- Логическое значение:
true, если ответ получен в результате перенаправления. status- Код состояния ответа.
statusText- Сообщение состояния, соответствующее коду состояния.
text()- Читает поток
Responseдо конца. ВозвращаетPromise, которое разрешается строкой. type- Тип ответа.
url- URL ответа.
ngx
ngx.build |
ngx.conf_file_path |
ngx.conf_prefix |
ngx.error_log_path |
ngx.fetch() |
ngx.log() |
ngx.prefix |
ngx.version |
ngx.version_number |
ngx.worker_id |
Глобальный объект ngx доступен начиная с версии 0.5.0.
ngx.build- строка с необязательным именем сборки nginx, соответствует аргументу
--build=nameскрипта configure; по умолчанию —""(0.8.0) ngx.conf_file_path- строка с путём к текущему файлу конфигурации nginx (0.8.0)
ngx.conf_prefix- строка с путём к префиксу конфигурации nginx — каталогу, в котором nginx ищет файлы конфигурации (0.7.8)
ngx.error_log_path- строка с путём к текущему файлу журнала ошибок (0.8.0)
ngx.fetch(resource, [options])-
Выполняет запрос для получения
resource(0.5.1), которым может быть URL или объектRequest(0.7.10). ВозвращаетPromise, которое разрешается объектомResponse. Начиная с версии 0.7.0 поддерживается схемаhttps://; перенаправления не обрабатываются.Если в
resourceуказан URL с доменным именем, имя определяется с помощью резолвера. Если указана схемаhttps://, для аутентификации HTTPS-сервераresourceнеобходимо настроить директиву js_fetch_trusted_certificate.Параметр
optionsдолжен быть объектом со следующими ключами:body- тело запроса; по умолчанию пустое
buffer_size- размер буфера для чтения ответа; по умолчанию —
4096 headers- объект заголовков запроса
max_response_body_size- максимальный размер тела ответа в байтах; по умолчанию —
32768 method- метод HTTP; по умолчанию используется метод
GET verify- включает или отключает проверку сертификата HTTPS-сервера; по умолчанию —
true(0.7.0)
Пример:
let reply = await ngx.fetch('http://nginx.org/'); let body = await reply.text(); r.return(200, body); -
ngx.log(level,message) - записывает сообщение в журнал ошибок с указанным уровнем логирования. Параметр
levelзадаёт один из уровней логирования, параметрmessageможет быть строкой или Buffer. Можно указать следующие уровни логирования:ngx.INFO,ngx.WARNиngx.ERR.Поскольку в nginx установлен жёстко заданный максимальный предел длины строки, в журнал можно записать только первые 2048 байт строки.
ngx.prefix- строка с путём к префиксу nginx — каталогу, в котором хранятся файлы сервера (0.8.0)
ngx.version- строка с версией nginx, например:
1.25.0(0.8.0) ngx.version_number- число, содержащее версию nginx, например:
1025000(0.8.0) ngx.worker_id- число, соответствующее внутреннему идентификатору рабочего процесса nginx; значение находится в диапазоне от
0до значения, указанного в директиве worker_processes (0.8.0)
ngx.shared
Глобальный объект ngx.shared доступен начиная с версии 0.8.0.
SharedDict
Общий словарь доступен начиная с версии 0.8.0. Имя, тип и размер общего словаря задаются директивой js_shared_dict_zone в контексте http или stream.
Объект SharedDict() имеет следующие свойства и методы:
ngx.shared.SharedDict.add(key, value [,timeout])- Устанавливает
valueдля указанногоkeyв словаре, только если ключ ещё не существует.key— это строка, представляющая ключ добавляемого элемента, аvalue— значение добавляемого элемента.Необязательный аргумент
timeoutзадаётся в миллисекундах и переопределяет параметрtimeoutдирективыjs_shared_dict_zoneв http или stream (начиная с 0.8.5). Это может быть полезно, если для некоторых ключей ожидаются уникальные тайм-ауты.Возвращает
true, если значение успешно добавлено в словарьSharedDict, иfalse, если ключ уже существует в словаре. ВыбрасываетSharedMemoryError, если в словареSharedDictнедостаточно свободного места. ВыбрасываетTypeError, еслиvalueимеет тип, отличный от ожидаемого этим словарём. ngx.shared.SharedDict.capacity- Возвращает ёмкость словаря
SharedDict, соответствующую параметруsizeдирективыjs_shared_dict_zoneв http или stream. ngx.shared.SharedDict.clear()- Удаляет все элементы из словаря
SharedDict. ngx.shared.SharedDict.delete(key)- Удаляет элемент, связанный с указанным ключом, из словаря
SharedDict; возвращаетtrue, если элемент существовал в словаре и был удалён, иfalseв противном случае. ngx.shared.SharedDict.freeSpace()- Возвращает размер свободных страниц в байтах. Если размер равен нулю, словарь
SharedDictвсё равно будет принимать новые значения, если на занятых страницах есть свободное место. ngx.shared.SharedDict.get(key)- Получает элемент по его
key, возвращает значение, связанное сkey, илиundefined, если такого значения нет. ngx.shared.SharedDict.has(key)- Выполняет поиск элемента по его
key, возвращаетtrue, если такой элемент существует, иfalseв противном случае. ngx.shared.SharedDict.incr(key,delta[[,init], timeout]))- Увеличивает целочисленное значение, связанное с
key, наdelta.key— это строка, аdelta— число, на которое нужно увеличить или уменьшить значение. Если ключ не существует, элемент будет инициализирован необязательным аргументомinit; по умолчанию используется0.Необязательный аргумент
timeoutзадаётся в миллисекундах и переопределяет параметрtimeoutдирективыjs_shared_dict_zoneв http или stream (начиная с 0.8.5). Если аргументtimeoutне указан, существующий TTL записи сохраняется (начиная с 0.9.7). До версии 0.9.7 отсутствиеtimeoutсбрасывало время истечения срока действия записи на значение по умолчанию, заданное директивой.Возвращает новое значение. Выбрасывает
SharedMemoryError, если в словареSharedDictнедостаточно свободного места. ВыбрасываетTypeError, если этот словарь не ожидает числовых значений.Этот метод можно использовать, только если тип словаря объявлен с параметром
type=numberдирективыjs_shared_dict_zoneв http или stream. ngx.shared.SharedDict.items([maxCount])- Возвращает массив пар «ключ — значение» словаря
SharedDict(начиная с 0.8.1). ПараметрmaxCountзадаёт максимальное количество получаемых элементов; по умолчанию используется1024. ngx.shared.SharedDict.keys([maxCount])- Возвращает массив ключей словаря
SharedDict. ПараметрmaxCountзадаёт максимальное количество получаемых ключей; по умолчанию используется1024. ngx.shared.SharedDict.name- Возвращает имя словаря
SharedDict, соответствующее параметруzone=директивыjs_shared_dict_zoneв http или stream. ngx.shared.SharedDict.pop(key)- Удаляет из словаря
SharedDictэлемент, связанный с указаннымkey, и возвращает значение, связанное сkey, илиundefined, если такого значения нет. ngx.shared.SharedDict.replace(key, value)- Заменяет
valueдля указанногоkey, только если ключ уже существует; возвращаетtrue, если значение успешно заменено, иfalse, если ключ не существует в словареSharedDict. ВыбрасываетSharedMemoryError, если в словареSharedDictнедостаточно свободного места. ВыбрасываетTypeError, еслиvalueимеет тип, отличный от ожидаемого этим словарём. ngx.shared.SharedDict.set(key, value [,timeout])- Устанавливает
valueдля указанногоkeyи возвращает этот словарьSharedDict(для цепочки вызовов методов).Необязательный аргумент
timeoutзадаётся в миллисекундах и переопределяет параметрtimeoutдирективыjs_shared_dict_zoneв http или stream (начиная с 0.8.5). Это может быть полезно, если для некоторых ключей ожидаются уникальные тайм-ауты. ngx.shared.SharedDict.size()- Возвращает количество элементов в словаре
SharedDict. ngx.shared.SharedDict.ttl(key)- Возвращает оставшееся время жизни в миллисекундах для указанного
keyилиundefined, если ключ не существует или срок его действия истёк (начиная с 0.9.7).Выбрасывает
TypeError, если словарь объявлен без параметраtimeoutдирективыjs_shared_dict_zoneв http или stream. ngx.shared.SharedDict.type- Возвращает
stringилиnumber, соответствующий типу словаряSharedDict, заданному параметромtype=директивыjs_shared_dict_zoneв http или stream.
встроенные объекты
console
console.error() |
console.info() |
console.log() |
console.time() |
console.timeEnd() |
console.warn() |
Объект console доступен в nginx начиная с 0.8.2, а в CLI — начиная с 0.2.6.
console.error(msg[, msg2 ...])- Выводит одно или несколько сообщений об ошибках. Сообщение может быть строкой или объектом.
console.info(msg[, msg2 ...])- Выводит одно или несколько информационных сообщений. Сообщение может быть строкой или объектом.
console.log(msg[, msg2 ...])- Выводит одно или несколько сообщений журнала. Сообщение может быть строкой или объектом.
console.time(label)- Запускает таймер, который позволяет измерить продолжительность операции. Параметр
labelпозволяет задавать имена для разных таймеров. Если вызватьconsole.timeEnd()с тем же именем, будет выведено время, прошедшее с момента запуска таймера, в миллисекундах. console.timeEnd(label)- Останавливает таймер, ранее запущенный с помощью
console.time(). Параметрlabelпозволяет задавать имена для разных таймеров. console.warn(msg[, msg2 ...])- Выводит одно или несколько предупреждений. Сообщение может быть строкой или объектом.
crypto
Объект crypto — это глобальный объект, предоставляющий доступ к криптографическим функциям (начиная с 0.7.0). Начиная с 0.9.7 поддерживается полная спецификация Web Crypto API.
-
сrypto.getRandomValues(typedArray) - Получает криптографически стойкие случайные значения. Возвращает тот же массив, который был передан в качестве
typedArray, но его содержимое заменено вновь сгенерированными случайными числами. Возможные значения:typedArray- может быть
Int8Array,Int16Array,Uint16Array,Int32ArrayилиUint32Array
-
сrypto.randomUUID() - Возвращает случайно сгенерированную строку UUID версии 4 длиной 36 символов, например
"36b8f84d-df4e-4d49-b662-bcde71a8764f"(начиная с 0.9.7). -
сrypto.subtle.encrypt(algorithm,key,data) - Шифрует
dataс использованием предоставленныхalgorithmиkey. ВозвращаетPromise, который выполняется с результатомArrayBuffer, содержащим шифротекст. Возможные значения:algorithm- объект, задающий используемый алгоритм и любые дополнительные параметры, если они требуются:
- для
RSA-OAEPпередайте объект со следующими ключами:-
name— строка, значение которой должно бытьRSA-OAEP:crypto.subtle.encrypt({name: "RSA-OAEP"}, key, data)
-
- для
AES-CTRпередайте объект со следующими ключами:-
name— строка, значение которой должно бытьAES-CTR -
counter—ArrayBuffer,TypedArrayилиDataView— начальное значение блока счетчика, длина которого должна составлять 16 байт (размер блока AES). Для счетчика используются крайние правые биты этого блока в количестве, заданном параметром length, а остальные биты используются для nonce. Например, если length задано равным 64, первая половина счетчика является nonce, а вторая используется для счетчика -
length— количество битов блока счетчика, используемых непосредственно для счетчика. Размер счетчика должен быть достаточным, чтобы не произошло его переполнение.
-
- для
AES-CBCпередайте объект со следующими ключами:-
name— строка, значение которой должно бытьAES-CBC -
iv, или вектор инициализации, — этоArrayBuffer,TypedArrayилиDataViewдлиной 16 байт; он должен быть непредсказуемым и, предпочтительно, криптографически случайным. Однако его не нужно хранить в секрете; например, его можно передавать вместе с шифротекстом в незашифрованном виде.
-
- для
AES-GCMпередайте объект со следующими ключами:-
name— строка, значение которой должно бытьAES-GCM -
iv, или вектор инициализации, — этоArrayBuffer,TypedArrayилиDataViewдлиной 16 байт; он должен быть уникальным для каждой операции шифрования, выполняемой с данным ключом -
additionalData(необязательный параметр) — этоArrayBuffer,TypedArrayилиDataView, содержащий дополнительные данные, которые не будут зашифрованы, но будут аутентифицированы вместе с зашифрованными данными. Если заданadditionalData, те же данные необходимо указать в соответствующем вызовеdecrypt(): если данные, переданные в вызовеdecrypt(), не совпадут с исходными данными, при расшифровании будет выброшено исключение. ДлинаadditionalDataв битах должна быть меньше2^64 - 1. -
tagLength(необязательный параметр, значение по умолчанию —128) —number, определяющий размер в битах тега аутентификации, создаваемого при шифровании и используемого для аутентификации при соответствующем расшифровании. Возможные значения:32,64,96,104,112,120или128. Спецификация AES-GCM рекомендует использовать96,104,112,120или128, хотя в некоторых приложениях могут быть допустимы32или64битов.
-
- для
key- объект
CryptoKey, содержащий ключ для шифрования data-
ArrayBuffer,TypedArrayилиDataView, содержащий данные для шифрования (также известные как открытый текст)
-
сrypto.subtle.decrypt(algorithm,key,data) - Расшифровывает зашифрованные данные. Возвращает
Promiseс расшифрованными данными. Возможные значения:algorithm- объект, задающий используемый алгоритм и любые необходимые дополнительные параметры. Значения дополнительных параметров должны совпадать со значениями, переданными в соответствующем вызове
encrypt().- для
RSA-OAEPпередайте объект со следующими ключами:-
name— строка, значение которой должно бытьRSA-OAEP:crypto.subtle.encrypt({name: "RSA-OAEP"}, key, data)
-
- для
AES-CTRпередайте объект со следующими ключами:-
name— строка, значение которой должно бытьAES-CTR -
counter—ArrayBuffer,TypedArrayилиDataView— начальное значение блока счетчика, длина которого должна составлять 16 байт (размер блока AES). Для счетчика используются крайние правые биты этого блока в количестве, заданном параметром length, а остальные биты используются для nonce. Например, если length задано равным 64, первая половина счетчика является nonce, а вторая используется для счетчика. -
length— количество битов блока счетчика, используемых непосредственно для счетчика. Размер счетчика должен быть достаточным, чтобы не произошло его переполнение.
-
- для
AES-CBCпередайте объект со следующими ключами:-
name— строка, значение которой должно бытьAES-CBC -
iv, или вектор инициализации, — этоArrayBuffer,TypedArrayилиDataViewдлиной 16 байт; он должен быть непредсказуемым и, предпочтительно, криптографически случайным. Однако его не нужно хранить в секрете (например, его можно передавать вместе с шифротекстом в незашифрованном виде).
-
- для
AES-GCMпередайте объект со следующими ключами:-
name— строка, значение которой должно бытьAES-GCM -
iv, или вектор инициализации, — этоArrayBuffer,TypedArrayилиDataViewдлиной 16 байт; он должен быть уникальным для каждой операции шифрования, выполняемой с данным ключом -
additionalData(необязательный параметр) — этоArrayBuffer,TypedArrayилиDataView, содержащий дополнительные данные, которые не будут зашифрованы, но будут аутентифицированы вместе с зашифрованными данными. Если заданadditionalData, те же данные необходимо указать в соответствующем вызовеdecrypt(): если данные, переданные в вызовеdecrypt(), не совпадут с исходными данными, при расшифровании будет выброшено исключение. ДлинаadditionalDataв битах должна быть меньше2^64 - 1. -
tagLength(необязательный параметр, значение по умолчанию —128) —number, определяющий размер в битах тега аутентификации, создаваемого при шифровании и используемого для аутентификации при соответствующем расшифровании. Возможные значения:32,64,96,104,112,120или128. Спецификация AES-GCM рекомендует использовать96,104,112,120или128, хотя в некоторых приложениях могут быть допустимы32или64битов.
-
- для
key- объект
CryptoKey, содержащий ключ для расшифрования. Если используетсяRSA-OAEP, это свойствоprivateKeyобъектаCryptoKeyPair. data-
ArrayBuffer,TypedArrayилиDataView, содержащий данные для расшифрования (также известные как шифротекст)
-
сrypto.subtle.deriveBits(algorithm,baseKey,length) - Получает массив битов на основе базового ключа. Возвращает
Promise, который будет выполнен с результатомArrayBuffer, содержащим полученные биты. Возможные значения:algorithm- объект, определяющий используемый алгоритм получения ключа:
- для
HKDFпередайте объект со следующими ключами:-
name— строка, значение которой должно бытьHKDF -
hash— строка с используемым алгоритмом хеширования:SHA-1,SHA-256,SHA-384илиSHA-512 -
salt—ArrayBuffer,TypedArrayилиDataView, представляющий случайное или псевдослучайное значение длиной, равной выходным данным функцииdigest. В отличие от исходного ключевого материала, переданного вderiveKey(), соль не требуется хранить в секрете. -
info—ArrayBuffer,TypedArrayилиDataView, представляющий контекстную информацию, специфичную для приложения, которая связывает полученный ключ с приложением или контекстом и позволяет получать разные ключи для разных контекстов, используя один и тот же исходный ключевой материал. Это свойство является обязательным, но буфер может быть пустым.
-
- для
PBKDF2передайте объект со следующими ключами:-
name— строка, значение которой должно бытьPBKDF2 -
hash— строка с используемым алгоритмом хеширования:SHA-1,SHA-256,SHA-384илиSHA-512 -
salt—ArrayBuffer,TypedArrayилиDataView, представляющий случайное или псевдослучайное значение длиной не менее16байт. В отличие от исходного ключевого материала, переданного вderiveKey(), соль не требуется хранить в секрете. -
iterations—number, представляющий количество выполнений хеш-функции вderiveKey()
-
- для
ECDHпередайте объект со следующими ключами (начиная с 0.9.1):-
name— строка, значение которой должно бытьECDH -
public—CryptoKey, представляющий открытый ключ другой стороны. Ключ должен быть сгенерирован с использованием той же эллиптической кривой, что и базовый ключ.
-
- для
X25519передайте объект со следующими ключами (начиная с 0.9.7):-
name— строка, значение которой должно бытьX25519 -
public—CryptoKey, представляющий открытый ключ другой стороны
-
- для
baseKey-
CryptoKey, представляющий входные данные алгоритма получения ключа — исходный ключевой материал для функции получения ключа: например, дляPBKDF2это может быть пароль, импортированный какCryptoKeyс помощьюсrypto.subtle.importKey() length- число, указывающее количество получаемых битов. Для совместимости с браузерами число должно быть кратно
8
-
сrypto.subtle.deriveKey(algorithm,baseKey,derivedKeyAlgorithm,extractable,keyUsages) - Получает секретный ключ из главного ключа. Возможные значения:
algorithm- объект, определяющий используемый алгоритм получения ключа:
- для
HKDFпередайте объект со следующими ключами:-
name— строка, значение которой должно бытьHKDF -
hash— строка с используемым алгоритмом хеширования:SHA-1,SHA-256,SHA-384илиSHA-512 -
salt—ArrayBuffer,TypedArrayилиDataView, представляющий случайное или псевдослучайное значение длиной, равной выходным данным функцииdigest. В отличие от исходного ключевого материала, переданного вderiveKey(), соль не требуется хранить в секрете. -
info—ArrayBuffer,TypedArrayилиDataView, представляющий контекстную информацию, специфичную для приложения, которая связывает полученный ключ с приложением или контекстом и позволяет получать разные ключи для разных контекстов, используя один и тот же исходный ключевой материал. Это свойство является обязательным, но буфер может быть пустым.
-
- для
PBKDF2передайте объект со следующими ключами:-
name— строка, значение которой должно бытьPBKDF2 -
hash— строка с используемым алгоритмом хеширования:SHA-1,SHA-256,SHA-384илиSHA-512 -
salt—ArrayBuffer,TypedArrayилиDataView, представляющий случайное или псевдослучайное значение длиной не менее16байт. В отличие от исходного ключевого материала, переданного вderiveKey(), соль не требуется хранить в секрете. -
iterations—number, представляющий количество выполнений хеш-функции вderiveKey()
-
- для
ECDHпередайте объект со следующими ключами (начиная с 0.9.1):-
name— строка, значение которой должно бытьECDH -
public—CryptoKey, представляющий открытый ключ другой стороны. Ключ должен быть сгенерирован с использованием той же эллиптической кривой, что и базовый ключ.
-
- для
X25519передайте объект со следующими ключами (начиная с 0.9.7):-
name— строка, значение которой должно бытьX25519 -
public—CryptoKey, представляющий открытый ключ другой стороны
-
- для
baseKey-
CryptoKey, представляющий входные данные алгоритма получения ключа — исходный ключевой материал для функции получения ключа: например, дляPBKDF2это может быть пароль, импортированный какCryptoKeyс помощьюсrypto.subtle.importKey(). derivedKeyAlgorithm- объект, определяющий алгоритм, для которого будет использоваться полученный ключ:
- для
HMACпередайте объект со следующими ключами:-
name— строка, значение которой должно бытьHMAC -
hash— строка с названием используемой функции хеширования:SHA-1,SHA-256,SHA-384илиSHA-512 -
length(необязательный параметр) —number, задающий длину ключа в битах. Если параметр не задан, длина ключа равна размеру блока выбранной хеш-функции
-
- для
AES-CTR,AES-CBC,AES-GCMилиAES-KW(начиная с 0.9.7) передайте объект со следующими ключами:-
name— строка, значение которой должно бытьAES-CTR,AES-CBC,AES-GCMилиAES-KW, в зависимости от используемого алгоритма -
length—number, задающий длину генерируемого ключа в битах:128,192или256
-
- для
extractable- логическое значение, указывающее, можно ли экспортировать ключ
keyUsages-
Array, указывающий, какие операции можно выполнять с полученным ключом. Использование ключа должно допускаться алгоритмом, заданным вderivedKeyAlgorithm. Возможные значения:encrypt- ключ для шифрования сообщений
decrypt- ключ для расшифрования сообщений
sign- ключ для подписания сообщений
verify- ключ для проверки подписей
deriveKey- ключ для получения нового ключа
deriveBits- ключ для получения битов
wrapKey- ключ для обертывания ключа
unwrapKey- ключ для развертывания ключа
-
сrypto.subtle.digest(algorithm,data) - Вычисляет дайджест указанных данных. Принимает в качестве аргументов идентификатор используемого алгоритма вычисления дайджеста и данные для обработки. Возвращает
Promise, который будет выполнен с дайджестом. Возможные значения:algorithm- строка, задающая используемую хеш-функцию:
SHA-1(не для криптографических приложений),SHA-256,SHA-384илиSHA-512 data-
ArrayBuffer,TypedArrayилиDataView, содержащий данные для обработки
-
сrypto.subtle.exportKey(format,key) - Экспортирует ключ: принимает ключ в виде объекта
CryptoKeyи возвращает его во внешнем переносимом формате (начиная с 0.7.10). Еслиformatимел значениеjwk, тоPromiseвыполняется с объектом JSON, содержащим ключ. В противном случае promise выполняется сArrayBuffer, содержащим ключ. Возможные значения:format- строка, описывающая формат данных для экспорта ключа; возможны следующие значения:
raw- формат необработанных данных
pkcs8- формат PKCS #8
spki- формат SubjectPublicKeyInfo
jwk- формат JSON Web Key (JWK) (начиная с 0.7.10)
key-
CryptoKey, содержащий экспортируемый ключ
-
сrypto.subtle.generateKey(algorithm,extractable,usage) - Генерирует новый ключ для симметричных алгоритмов или пару ключей для алгоритмов с открытым ключом (начиная с 0.7.10). Возвращает
Promise, который выполняется с сгенерированным ключом в виде объектаCryptoKeyилиCryptoKeyPair. Возможные значения:algorithm- объект-словарь, определяющий тип генерируемого ключа и дополнительные параметры, специфичные для алгоритма:
- для
RSASSA-PKCS1-v1_5,RSA-PSSилиRSA-OAEPпередайте объект со следующими ключами:-
name— строка, значение которой должно бытьRSASSA-PKCS1-v1_5,RSA-PSSилиRSA-OAEP, в зависимости от используемого алгоритма -
hash— строка, содержащая название используемой функцииdigest; возможные значения:SHA-256,SHA-384илиSHA-512
-
- для
ECDSAпередайте объект со следующими ключами:-
name— строка, значение которой должно бытьECDSA -
namedCurve— строка, содержащая название используемой эллиптической кривой; возможные значения:P-256,P-384илиP-521
-
- для
HMACпередайте объект со следующими ключами:-
name— строка, значение которой должно бытьHMAC -
hash— строка, содержащая название используемой функцииdigest; возможные значения:SHA-256,SHA-384илиSHA-512 -
length(необязательный параметр) — число, задающее длину ключа в битах. Если параметр не указан, длина ключа равна длине дайджеста, полученного выбранной функцией хеширования.
-
- для
AES-CTR,AES-CBC,AES-GCMилиAES-KW(начиная с 0.9.7) передайте строку с идентификатором алгоритма или объект вида{ "name": "ALGORITHM" }, гдеALGORITHM— название алгоритма - для
ECDHпередайте объект со следующими ключами (начиная с 0.9.1):-
name— строка, значение которой должно бытьECDH -
namedCurve— строка, содержащая название используемой эллиптической кривой; возможные значения:P-256,P-384илиP-521
-
- для
Ed25519передайте строкуEd25519или объект вида{ "name": "Ed25519" }(начиная с 0.9.7) - для
X25519передайте строкуX25519или объект вида{ "name": "X25519" }(начиная с 0.9.7)
- для
extractable- логическое значение, указывающее, можно ли экспортировать ключ
usage-
array, указывающий возможные операции с ключом:encrypt- ключ для шифрования сообщений
decrypt- ключ для расшифрования сообщений
sign- ключ для подписания сообщений
verify- ключ для проверки подписей
deriveKey- ключ для получения нового ключа
deriveBits- ключ для получения битов
wrapKey- ключ для обертывания ключа
unwrapKey- ключ для развертывания ключа
-
сrypto.subtle.importKey(format,keyData,algorithm,extractable,keyUsages)
- Импортирует ключ: принимает ключ во внешнем переносимом формате и возвращает объект
CryptoKey. ВозвращаетPromise, который выполняется с импортированным ключом в виде объектаCryptoKey. Возможные значения:format- строка, описывающая формат данных импортируемого ключа. Возможны следующие значения:
raw- формат необработанных данных
pkcs8- формат PKCS #8
spki- формат SubjectPublicKeyInfo
jwk- формат JSON Web Key (JWK) (начиная с 0.7.10)
keyData- объект
ArrayBuffer,TypedArrayилиDataView, содержащий ключ в указанном формате algorithm- объект-словарь, определяющий тип импортируемого ключа и предоставляющий дополнительные параметры, специфичные для алгоритма:
- для
RSASSA-PKCS1-v1_5,RSA-PSSилиRSA-OAEPпередайте объект со следующими ключами:-
name— строка; должно быть задано значениеRSASSA-PKCS1-v1_5,RSA-PSSилиRSA-OAEPв зависимости от используемого алгоритма -
hash— строка, задающая имя используемой функцииdigest. Возможные значения:SHA-1,SHA-256,SHA-384илиSHA-512
-
- для
ECDSAпередайте объект со следующими ключами:-
name— строка; должно быть задано значениеECDSA -
namedCurve— строка, задающая имя используемой эллиптической кривой. Возможные значения:P-256,P-384илиP-521
-
- для
HMACпередайте объект со следующими ключами:-
name— строка; должно быть задано значениеHMAC -
hash— строка, задающая имя используемой функцииdigest. Возможные значения:SHA-256,SHA-384илиSHA-512 -
length(необязательный параметр) — число, задающее длину ключа в битах. Если параметр не указан, длина ключа равна длине дайджеста, созданного выбранной функцией дайджеста.
-
- для
AES-CTR,AES-CBC,AES-GCMилиAES-KW(начиная с 0.9.7) передайте строку с идентификатором алгоритма или объект вида{ "name": "ALGORITHM" }, гдеALGORITHM— имя алгоритма - для
PBKDF2передайте строкуPBKDF2 - для
HKDFпередайте строкуHKDF - для
ECDHпередайте объект со следующими ключами (начиная с 0.9.1):-
name— строка; должно быть задано значениеECDH -
namedCurve— строка, задающая имя используемой эллиптической кривой. Возможные значения:P-256,P-384илиP-521
-
- для
Ed25519передайте строкуEd25519или объект вида{ "name": "Ed25519" }(начиная с 0.9.7) - для
X25519передайте строкуX25519или объект вида{ "name": "X25519" }(начиная с 0.9.7)
- для
extractable- логическое значение, указывающее, можно ли экспортировать ключ
keyUsages- объект
array, указывающий возможные действия с ключом:encrypt- ключ для шифрования сообщений
decrypt- ключ для расшифровки сообщений
sign- ключ для подписания сообщений
verify- ключ для проверки подписей
deriveKey- ключ для получения нового ключа
deriveBits- ключ для получения битов
wrapKey- ключ для обёртывания ключа
unwrapKey- ключ для развёртывания ключа
-
сrypto.subtle.sign(algorithm,key,data) - Возвращает
signatureв видеPromise, который выполняется с объектомArrayBuffer, содержащим подпись. Возможные значения:algorithm- строка или объект, задающий используемый алгоритм подписи и его параметры:
- для
RSASSA-PKCS1-v1_5передайте строку с идентификатором алгоритма или объект вида{ "name": "ALGORITHM" } - для
RSA-PSSпередайте объект со следующими ключами:-
name— строка; должно быть задано значениеRSA-PSS -
saltLength— длинное значениеinteger, задающее длину используемой случайной соли в байтах
-
- для
ECDSAпередайте объект со следующими ключами:-
name— строка; должно быть задано значениеECDSA -
hash— идентификатор используемого алгоритма дайджеста. Возможные значения:SHA-256,SHA-384илиSHA-512
-
- для
HMACпередайте строку с идентификатором алгоритма или объект вида{ "name": "ALGORITHM" } - для
Ed25519передайте строкуEd25519или объект вида{ "name": "Ed25519" }(начиная с 0.9.7)
- для
key- объект
CryptoKey— ключ, используемый для подписания. Если алгоритм обозначает криптосистему с открытым ключом, это закрытый ключ. data- объект
ArrayBuffer,TypedArrayилиDataView, содержащий данные для подписания
-
сrypto.subtle.verify(algorithm,key,signature,data) - Проверяет цифровую подпись и возвращает
Promise, который выполняется с логическим значением:true, если подпись действительна, иначеfalse. Возможные значения:algorithm- строка или объект, задающий используемый алгоритм и его параметры:
- для
RSASSA-PKCS1-v1_5передайте строку с идентификатором алгоритма или объект вида{ "name": "ALGORITHM" } - для
RSA-PSSпередайте объект со следующими ключами:-
name— строка; должно быть задано значениеRSA-PSS -
saltLength— длинное значениеinteger, задающее длину используемой случайной соли в байтах
-
- для
ECDSAпередайте объект со следующими ключами:-
name— строка; должно быть задано значениеECDSA -
hash— идентификатор используемого алгоритма дайджеста. Возможные значения:SHA-256,SHA-384илиSHA-512
-
- для
HMACпередайте строку с идентификатором алгоритма или объект вида{ "name": "ALGORITHM" } - для
Ed25519передайте строкуEd25519или объект вида{ "name": "Ed25519" }(начиная с 0.9.7)
- для
key- объект
CryptoKey— ключ, используемый для проверки. Для симметричного алгоритма это секретный ключ, а для системы с открытым ключом — открытый ключ. signature- объект
ArrayBuffer,TypedArrayилиDataView, содержащий проверяемую подпись data- объект
ArrayBuffer,TypedArrayилиDataView, содержащий данные, подпись которых требуется проверить
-
сrypto.subtle.wrapKey(format,key,wrappingKey,wrapAlgorithm) - Обёртывает ключ: экспортирует ключ во внешний переносимый формат, а затем шифрует экспортированный ключ (начиная с 0.9.7). Возвращает
Promise, который выполняется с объектомArrayBuffer, содержащим зашифрованный экспортированный ключ. Возможные значения:format- строка, описывающая формат данных экспортируемого перед шифрованием ключа. Возможны следующие значения:
raw- формат необработанных данных
pkcs8- формат PKCS #8
spki- формат SubjectPublicKeyInfo
jwk- формат JSON Web Key (JWK)
key- объект
CryptoKey, содержащий оборачиваемый ключ. Для ключа должно быть установлено значениеtrueсвойстваCryptoKey.extractable. wrappingKey- объект
CryptoKey, содержащий ключ, используемый для шифрования экспортированного ключа. Для ключа должно быть задано назначениеwrapKey. wrapAlgorithm- объект, задающий алгоритм шифрования экспортированного ключа и любые необходимые дополнительные параметры:
- для
AES-CBC,AES-CTRилиAES-GCMпередайте соответствующие параметры алгоритма, как описано всrypto.subtle.encrypt() - для
AES-KWпередайте строкуAES-KWили объект вида{ "name": "AES-KW" } - для
RSA-OAEPпередайте соответствующие параметры алгоритма, как описано всrypto.subtle.encrypt()
- для
-
сrypto.subtle.unwrapKey(format,wrappedKey,unwrappingKey,unwrapAlgorithm,unwrappedKeyAlgorithm,extractable,keyUsages) - Разворачивает ключ: расшифровывает обёрнутый ключ и создаёт объект
CryptoKeyна основе результата (начиная с 0.9.7). ВозвращаетPromise, который выполняется с развёрнутым ключом в виде объектаCryptoKey. Возможные значения:format- строка, описывающая формат данных обёрнутого ключа. Возможны следующие значения:
raw- формат необработанных данных
pkcs8- формат PKCS #8
spki- формат SubjectPublicKeyInfo
jwk- формат JSON Web Key (JWK)
wrappedKey- объект
ArrayBuffer,TypedArrayилиDataView, содержащий обёрнутый ключ в указанном формате unwrappingKey- объект
CryptoKey, содержащий ключ, используемый для расшифровки обёрнутого ключа. Для ключа должно быть задано назначениеunwrapKey. unwrapAlgorithm- объект, задающий алгоритм расшифровки обёрнутого ключа и любые необходимые дополнительные параметры:
- для
AES-CBC,AES-CTRилиAES-GCMпередайте соответствующие параметры алгоритма, как описано всrypto.subtle.encrypt() - для
AES-KWпередайте строкуAES-KWили объект вида{ "name": "AES-KW" } - для
RSA-OAEPпередайте соответствующие параметры алгоритма, как описано всrypto.subtle.encrypt()
- для
unwrappedKeyAlgorithm- объект-словарь, определяющий тип разворачиваемого ключа и предоставляющий дополнительные параметры, специфичные для алгоритма. Применяются те же описания алгоритмов, что и в
сrypto.subtle.importKey(). extractable- логическое значение, указывающее, можно ли экспортировать ключ
keyUsages- объект
array, указывающий возможные действия с ключом:encrypt- ключ для шифрования сообщений
decrypt- ключ для расшифровки сообщений
sign- ключ для подписания сообщений
verify- ключ для проверки подписей
deriveKey- ключ для получения нового ключа
deriveBits- ключ для получения битов
wrapKey- ключ для обёртывания ключа
unwrapKey- ключ для развёртывания ключа
CryptoKey
CryptoKey.algorithm |
CryptoKey.extractable |
CryptoKey.type |
CryptoKey.usages |
Объект CryptoKey представляет собой криптографический key, полученный одним из методов SubtleCrypto: сrypto.subtle.generateKey(), сrypto.subtle.deriveKey(), сrypto.subtle.importKey().
CryptoKey.algorithm- возвращает объект с описанием алгоритма, для которого можно использовать этот ключ, и любых связанных с ним дополнительных параметров (начиная с 0.8.0); только для чтения
CryptoKey.extractable- логическое значение:
true, если ключ можно экспортировать (начиная с 0.8.0); только для чтения CryptoKey.type- строковое значение, указывающее тип ключа, представленного объектом; только для чтения. Возможные значения:
secret- Этот ключ является секретным ключом для симметричного алгоритма.
private- Этот ключ является закрытой частью
CryptoKeyPairасимметричного алгоритма public- Этот ключ является открытой частью
CryptoKeyPairасимметричного алгоритма.
CryptoKey.usages- Массив строк, указывающих, для чего можно использовать этот ключ (начиная с 0.8.0); только для чтения. Возможные значения массива:
encrypt- ключ для шифрования сообщений
decrypt- ключ для расшифровки сообщений
sign- ключ для подписания сообщений
verify- ключ для проверки подписей
deriveKey- ключ для получения нового ключа
deriveBits- ключ для получения битов
CryptoKeyPair
CryptoKeyPair.privateKey |
CryptoKeyPair.publicKey |
CryptoKeyPair — объект-словарь WebCrypto API, представляющий пару асимметричных ключей.
CryptoKeyPair.privateKey- Объект
CryptoKey, представляющий закрытый ключ. CryptoKeyPair.publicKey- Объект
CryptoKey, представляющий открытый ключ.
njs
njs.version |
njs.version_number |
njs.dump() |
njs.memoryStats |
njs.on() |
Объект njs является глобальным объектом, представляющим текущий экземпляр виртуальной машины (начиная с 0.2.0).
njs.version- Возвращает строку с текущей версией njs (например, «0.7.4»).
njs.version_number- Возвращает число, соответствующее текущей версии njs. Например, версия «0.7.4» возвращается как
0x000704(начиная с 0.7.4). njs.dump(value)- Возвращает строковое представление значения с форматированием для удобного чтения.
njs.memoryStats- Объект, содержащий статистику памяти для текущего экземпляра виртуальной машины (начиная с 0.7.8).
size- объём памяти в байтах, выделенной пулу памяти njs операционной системой.
njs.on(event, callback)- Регистрирует функцию обратного вызова для указанного события виртуальной машины (начиная с 0.5.2). Событие задаётся одной из следующих строк:
exit- вызывается перед уничтожением виртуальной машины. Функция обратного вызова вызывается без аргументов.
process
process.argv |
process.env |
process.kill() |
process.pid |
process.ppid |
Объект process — глобальный объект, предоставляющий информацию о текущем процессе (0.3.3).
process.argv- Возвращает массив аргументов командной строки, переданных при запуске текущего процесса.
process.env- Возвращает объект, содержащий пользовательское окружение.
По умолчанию nginx удаляет все переменные окружения, унаследованные от родительского процесса, кроме переменной TZ. Используйте директиву env, чтобы сохранить некоторые унаследованные переменные.
process.kill(pid, number | string)- Отправляет сигнал процессу, идентифицируемому по
pid. Имена сигналов задаются числами или строками, например 'SIGINT' или 'SIGHUP'. Дополнительные сведения см. в kill(2). process.pid- Возвращает PID текущего процесса.
process.ppid- Возвращает PID текущего родительского процесса.
String
По умолчанию все строки в njs являются строками Unicode. Они соответствуют строкам ECMAScript, содержащим символы Unicode. До версии 0.8.0 также поддерживались байтовые строки.
Байтовые строки
Начиная с версии 0.8.0, поддержка байтовых строк и методов байтовых строк удалена. При работе с последовательностями байтов следует использовать объект Buffer и свойстваBuffer, такие какr.requestBufferиr.rawVariables.
Байтовые строки содержат последовательность байтов и используются для сериализации строк Unicode во внешние данные и десериализации данных из внешних источников. Например, метод toUTF8() сериализует строку Unicode в байтовую строку с использованием кодировки UTF-8:
>> '£'.toUTF8().toString('hex')
'c2a3' /* C2 A3 is the UTF-8 representation of 00A3 ('£') code point */
Метод toBytes() сериализует строку Unicode с кодовыми точками не выше 255 в байтовую строку; в противном случае возвращается null:
>> '£'.toBytes().toString('hex')
'a3' /* a3 is a byte equal to 00A3 ('£') code point */
String.bytesFrom(array | string, encoding)- Метод устарел в версии 0.4.4 и был удалён в версии 0.8.0. Вместо него следует использовать метод
Buffer.from:>> Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]).toString() 'buffer' >> Buffer.from('YnVmZmVy', 'base64').toString() 'buffer'До версии 0.4.4 создавал байтовую строку из массива октетов или из строки в кодировке (0.2.3); в качестве кодировки можно было указатьhex,base64иbase64url. String.prototype.fromBytes(start[, end])- Свойство устарело в версии 0.7.7 и было удалено в версии 0.8.0. До версии 0.7.7 возвращало новую строку Unicode, полученную из байтовой строки, в которой каждый байт заменялся соответствующей кодовой точкой Unicode.
String.prototype.fromUTF8(start[, end])- Свойство устарело в версии 0.7.7 и было удалено в версии 0.8.0. Вместо него следует использовать метод
TextDecoder. До версии 0.7.7 преобразовывало байтовую строку с корректной строкой UTF-8 в строку Unicode; в противном случае возвращалосьnull. String.prototype.toBytes(start[, end])- Свойство устарело в версии 0.7.7 и было удалено в версии 0.8.0. До версии 0.7.7 сериализовало строку Unicode в байтовую строку и возвращало
null, если в строке обнаруживался символ с кодом больше 255. String.prototype.toString(encoding)-
Свойство устарело в версии 0.7.7 и было удалено в версии 0.8.0. До версии 0.7.7 кодировало строку в
hex,base64илиbase64url:>> 'αβγδ'.toString('base64url') 'zrHOss6zzrQ'До версии 0.4.3 можно было кодировать только байтовую строку:
>> 'αβγδ'.toUTF8().toString('base64url') 'zrHOss6zzrQ' String.prototype.toUTF8(start[, end])- Свойство устарело в версии 0.7.7 и было удалено в версии 0.8.0. Вместо него следует использовать метод
TextEncoder. До версии 0.7.7 сериализовало строку Unicode в байтовую строку с использованием кодировки UTF-8:>> 'αβγδ'.toUTF8().length 8 >> 'αβγδ'.length 4
Веб-API
Декодер текста
TextDecoder() |
TextDecoder.prototype.encoding |
TextDecoder.prototype.fatal |
TextDecoder.prototype.ignoreBOM |
TextDecoder.prototype.decode() |
TextDecoder преобразует поток байтов в поток кодовых точек (0.4.3).
TextDecoder([[encoding], options])- Создаёт новый объект
TextDecoderдля указаннойencoding; в настоящее время поддерживается только UTF-8.options— это словарьTextDecoderOptionsсо свойством:fatal- логический флаг, указывающий, должен ли
TextDecoder.decode()генерировать исключениеTypeErrorпри обнаружении ошибки кодирования; по умолчанию —false.
TextDecoder.prototype.encoding- Возвращает строку с названием кодировки, используемой объектом
TextDecoder(); только для чтения. TextDecoder.prototype.fatal- Логический флаг:
true, если режим обработки ошибок является критическим; только для чтения. TextDecoder.prototype.ignoreBOM- Логический флаг:
true, если маркер порядка байтов игнорируется; только для чтения. TextDecoder.prototype.decode(buffer, [options])- Возвращает строку с текстом, декодированным из
bufferобъектомTextDecoder(). Буфер может бытьArrayBuffer.options— это словарьTextDecodeOptionsсо свойством:stream- логический флаг, указывающий, будут ли дополнительные данные переданы в последующих вызовах
decode():trueпри обработке данных по частям иfalseдля последней части или если данные не разделены на части. По умолчанию —false.
>> (new TextDecoder()).decode(new Uint8Array([206,177,206,178])) αβ
Кодировщик текста
TextEncoder() |
TextEncoder.prototype.encode() |
TextEncoder.prototype.encodeInto() |
Объект TextEncoder преобразует поток кодовых точек в поток байтов в кодировке UTF-8 (0.4.3).
TextEncoder()- Возвращает новый объект
TextEncoder, который будет создавать поток байтов в кодировке UTF-8. TextEncoder.prototype.encode(string)- Кодирует
stringвUint8Arrayс текстом в кодировке UTF-8. TextEncoder.prototype.encodeInto(string, uint8Array)- Кодирует
stringв UTF-8, помещает результат в целевой объектUint8Arrayи возвращает объект-словарь, отображающий ход кодирования. Объект-словарь содержит два элемента:read- количество кодовых единиц UTF-16 исходного
string, преобразованных в UTF-8 written- количество байтов, изменённых в целевом объекте
Uint8Array
таймеры
clearTimeout() |
setTimeout() |
clearTimeout(timeout)- Отменяет объект
timeout, созданный с помощьюsetTimeout(). setTimeout(function, milliseconds[, argument1, argumentN])- Вызывает
functionпо истечении указанного количестваmilliseconds. Указанной функции можно передать один или несколько необязательныхarguments. Возвращает объектtimeout.function handler(v) { // ... } t = setTimeout(handler, 12); // ... clearTimeout(t);
Глобальные функции
atob() |
btoa() |
atob(encodedData)- Декодирует строку данных, закодированную с помощью кодировки
Base64. ПараметрencodedData— это двоичная строка, содержащая данные, закодированные в Base64. Возвращает строку, содержащую данные, декодированные изencodedData.Аналогичный метод
btoa()можно использовать для кодирования и передачи данных, которые иначе могут вызвать проблемы при обмене, а затем для декодирования данных с помощью методаatob(). Например, можно кодировать, передавать и декодировать управляющие символы, такие как символы ASCII со значениями от0до31.const encodedData = btoa("text to encode"); // encode a string const decodedData = atob(encodedData); // decode the string btoa(stringToEncode)- Создаёт строку ASCII в кодировке Base64 из двоичной строки. Параметр
stringToEncode— это двоичная строка для кодирования. Возвращает строку ASCII, содержащую представлениеstringToEncodeв Base64.Метод можно использовать для кодирования данных, которые иначе могут вызвать проблемы при обмене, передать их, а затем декодировать с помощью метода
atob(). Например, можно кодировать управляющие символы, такие как символы ASCII со значениями от0до31.const encodedData = btoa("text to encode"); // encode a string const decodedData = atob(encodedData); // decode the string
встроенные модули
Buffer
Buffer.alloc(size[, fill[, encoding]]))-
Выделяет новый Buffer заданного размера
size. Еслиfillне указан, Buffer будет заполнен нулями. Если указанfill, выделенный Buffer будет инициализирован вызовомbuf.fill(fill). Если указаныfillиencoding, выделенный Buffer будет инициализирован вызовомbuf.fill(fill, encoding).Параметр
fillможет быть типаstring,Buffer,Uint8Arrayилиinteger. Buffer.allocUnsafe(size)-
Работает так же, как
Buffer.alloc(), но выделенная для буфера память не инициализируется; содержимое нового буфера неизвестно и может включать конфиденциальные данные. Buffer.byteLength(value[, encoding])- Возвращает длину указанного значения в байтах при кодировании с помощью
encoding. Значение может быть типаstring,Buffer,TypedArray,DataViewилиArrayBuffer. Если значение имеет типstring, параметрencodingзадаёт его кодировку и может принимать значенияutf8,hex,base64,base64url; по умолчанию используетсяutf8. Buffer.compare(buffer1, buffer2)- Сравнивает
buffer1сbuffer2при сортировке массивов экземпляров Buffer. Возвращает0, еслиbuffer1совпадает сbuffer2,1, еслиbuffer2должно предшествоватьbuffer1при сортировке, или-1, еслиbuffer2должно следовать заbuffer1при сортировке. Buffer.concat(list[, totalLength])- Возвращает новый Buffer, полученный путём объединения всех экземпляров Buffer в списке. Если список пуст или его общая длина равна 0, возвращается новый Buffer нулевой длины. Если
totalLengthне указан, его значение вычисляется путём сложения длин экземпляров Buffer в списке. ЕслиtotalLengthуказан, его значение преобразуется в беззнаковое целое число. Если общая длина буферов в списке превышаетtotalLength, результат усекается доtotalLength. Buffer.from(array)- Выделяет новый Buffer, используя массив байтов в диапазоне
0–255. Элементы массива за пределами этого диапазона усекаются. Buffer.from(arrayBuffer, byteOffset[, length]])- Создаёт представление
ArrayBufferбез копирования базовой памяти. Необязательные аргументыbyteOffsetиlengthзадают диапазон памяти внутриarrayBuffer, который будет использоваться совместно с Buffer. Buffer.from(buffer)- Копирует переданные данные буфера в новый экземпляр Buffer.
Buffer.from(object[, offsetOrEncoding[, length]])- Для объектов, функция
valueOf()которых возвращает значение, не строго равное самому объекту, возвращаетBuffer.from(object.valueOf(),offsetOrEncoding,length). Buffer.from(string[, encoding])- Создаёт новый Buffer с
string. Параметрencodingзадаёт кодировку символов, используемую при преобразовании строки в байты. Кодировка может бытьutf8,hex,base64,base64url; по умолчанию используетсяutf8. Buffer.isBuffer(object)- Логическое значение: возвращает
true, еслиobjectявляется Buffer. Buffer.isEncoding(encoding)- Логическое значение: возвращает
true, если кодировка является именем поддерживаемой кодировки символов. buffer[index]- Оператор индексирования, с помощью которого можно получить и задать октет в позиции
indexвbuffer. Значения соответствуют отдельным байтам, поэтому допустимый диапазон значений составляет от 0 до 255 (десятичная система). buf.buffer- Базовый объект
ArrayBuffer, на основе которого создан этот объект Buffer. buf.byteOffset- Целое число, задающее
byteOffsetобъектаArrayBuffer, лежащего в основе буферов. buf.compare(target[, targetStart[, targetEnd[, sourceStart[, sourceEnd]]]])- Сравнивает буфер с
targetи возвращает число, указывающее, предшествует ли буферtarget, следует за ним или совпадает с ним в порядке сортировки. Сравнение выполняется на основе фактической последовательности байтов каждого Buffer. ПараметрtargetStart— целое число, задающее смещение внутриtarget, с которого начинается сравнение; по умолчанию равно 0. ПараметрtargetEnd— целое число, задающее смещение внутриtarget, на котором заканчивается сравнение; по умолчанию равноtarget.length. ПараметрsourceStart— целое число, задающее смещение внутри буфера, с которого начинается сравнение; по умолчанию равно 0. ПараметрsourceEnd— целое число, задающее смещение внутри буфера, на котором заканчивается сравнение (не включая этот байт); по умолчанию равноbuf.length. buf.copy(target[, targetStart[, sourceStart[, sourceEnd]]])- Копирует данные из области буфера в область
target, даже если целевая область памяти перекрывается с буфером. Параметрtarget— это объект типаBufferилиUint8Array, в который выполняется копирование.Параметр
targetStart— целое число, задающее смещение в целевом объекте, с которого начинается запись; по умолчанию равно 0. ПараметрsourceStart— целое число, задающее смещение в буфере, с которого начинается копирование; по умолчанию равно 0. ПараметрsourceEnd— целое число, задающее смещение в буфере, на котором заканчивается копирование (не включая этот байт); по умолчанию равноbuf.length. buf.equals(otherBuffer)- Логическое значение: возвращает
true, если Buffer иotherBufferсодержат в точности одинаковые байты. buf.fill(value[, offset[, end]][, encoding])- Заполняет Buffer указанным значением
value. Еслиoffsetиendне указаны, заполняется весь Buffer. Параметрvalueпреобразуется вuint32, если он не является значением типаstring,Bufferилиinteger. Если полученное целое число больше 255, Buffer заполняется значениемvalueи 255. buf.includes(value[, byteOffset][, encoding])- Эквивалентно
buf.indexOf()!== -1; возвращаетtrue, еслиvalueнайдено в Buffer. buf.indexOf(value[, byteOffset][, encoding])- Возвращает целое число — индекс первого вхождения
valueв Buffer или-1, если Buffer не содержит это значение. Параметрvalueможет быть строкой типаstringс указаннымencoding(по умолчаниюutf8), значением типаBuffer,Unit8Arrayили числом от 0 до 255. buf.lastIndexOf(value[, byteOffset][, encoding])- Работает так же, как
buf.indexOf(), но находит последнее вхождениеvalue, а не первое. Параметрvalueможет быть строкой, Buffer или целым числом от 1 до 255. Еслиvalue— пустая строка или пустой Buffer, возвращаетсяbyteOffset. buf.length- Возвращает количество байтов в Buffer.
buf.readIntBE(offset, byteLength)- Считывает
byteLengthизbufпо указанномуoffsetи интерпретирует результат как знаковое число в дополнительном коде с порядком байтов от старшего к младшему, поддерживающее точность до 48 бит. ПараметрbyteLength— целое число от 1 до 6, задающее количество считываемых байтов.Также поддерживаются аналогичные методы:
buf.readInt8([offset]),buf.readInt16BE([offset]),buf.readInt32BE([offset]). buf.readIntLE(offset, byteLength)- Считывает
byteLengthизbufпо указанномуoffsetи интерпретирует результат как знаковое число в дополнительном коде с порядком байтов от младшего к старшему, поддерживающее точность до 48 бит. ПараметрbyteLength— целое число от 1 до 6, задающее количество считываемых байтов.Также поддерживаются аналогичные методы:
buf.readInt8([offset]),buf.readInt16LE([offset]),buf.readInt32LE([offset]). buf.readUIntBE(offset, byteLength)- Считывает
byteLengthизbufпо указанномуoffsetи интерпретирует результат как целое число с порядком байтов от старшего к младшему, поддерживающее точность до 48 бит. ПараметрbyteLength— целое число от 1 до 6, задающее количество считываемых байтов.Также поддерживаются аналогичные методы:
buf.readUInt8([offset]),buf.readUInt16BE([offset]),buf.readUInt32BE([offset]). buf.readUIntLE(offset, byteLength)- Считывает
byteLengthизbufпо указанномуoffsetи интерпретирует результат как целое число с порядком байтов от младшего к старшему, поддерживающее точность до 48 бит. ПараметрbyteLength— целое число от 1 до 6, задающее количество считываемых байтов.Также поддерживаются аналогичные методы:
buf.readUInt8([offset]),buf.readUInt16LE([offset]),buf.readUInt32LE([offset]). -
buf.readDoubleBE([offset]) - Считывает 64-битное число с плавающей точкой двойной точности с порядком байтов от старшего к младшему из
bufпо указанномуoffset. -
buf.readDoubleLE([offset]) - Считывает 64-битное число с плавающей точкой двойной точности с порядком байтов от младшего к старшему из
bufпо указанномуoffset. -
buf.readFloatBE([offset]) - Считывает 32-битное число с плавающей точкой с порядком байтов от старшего к младшему из
bufпо указанномуoffset. -
buf.readFloatLE([offset]) - Считывает 32-битное число с плавающей точкой с порядком байтов от младшего к старшему из
bufпо указанномуoffset. buf.subarray([start[, end]])- Возвращает новый
buf, ссылающийся на ту же область памяти, что и исходный, но со смещением и обрезанный по значениямstartиend. Еслиendбольше, чемbuf.length, возвращается тот же результат, что и при значении end, равномbuf.length. buf.slice([start[, end]])- Возвращает новый
buf, ссылающийся на ту же область памяти, что и исходный, но со смещением и обрезанный по значениямstartиend. Метод несовместим сUint8Array.prototype.slice(), суперклассом Buffer. Чтобы скопировать срез, используйтеUint8Array.prototype.slice(). -
buf.swap16() - Интерпретирует
bufкак массив беззнаковых 16-битных чисел и меняет порядок байтов на месте. Вызывает ошибку, еслиbuf.lengthне кратно 2. -
buf.swap32() - Интерпретирует
bufкак массив беззнаковых 32-битных чисел и меняет порядок байтов на месте. Вызывает ошибку, еслиbuf.lengthне кратно 4. -
buf.swap64() - Интерпретирует
bufкак массив 64-битных чисел и меняет порядок байтов на месте. Вызывает ошибку, еслиbuf.lengthне кратно 8. -
buf.toJSON() - Возвращает представление
buf.в формате JSON.JSON.stringify()неявно вызывает эту функцию при преобразовании экземпляра Buffer в строку. buf.toString([encoding[, start[, end]]])- Декодирует
bufв строку согласно указанной кодировке символовencoding, которая может бытьutf8,hex,base64,base64url. Параметрыstartиendможно передать, чтобы декодировать только часть Buffer. buf.write(string[, offset[, length]][, encoding])- Записывает
stringвbufпо смещениюoffsetсогласно кодировке символовencoding. Параметрlengthзадаёт количество записываемых байтов. Если в Buffer недостаточно места для всей строки, будет записана только её часть; частично закодированные символы при этом записаны не будут. Параметрencodingможет принимать значенияutf8,hex,base64,base64url. buf.writeIntBE(value, offset, byteLength)- Записывает
byteLengthбайтов значенияvalueвbufпо указанномуoffset, используя порядок байтов от старшего к младшему. Поддерживает точность до 48 бит. ПараметрbyteLength— целое число от 1 до 6, задающее количество считываемых байтов.Также поддерживаются следующие аналогичные методы:
buf.writeInt8,buf.writeInt16BE,buf.writeInt32BE. buf.writeIntLE(value, offset, byteLength)- Записывает
byteLengthбайтов значенияvalueвbufпо указанномуoffset, используя порядок байтов от младшего к старшему. Поддерживает точность до 48 бит. ПараметрbyteLength— целое число от 1 до 6, задающее количество считываемых байтов.Также поддерживаются следующие аналогичные методы:
buf.writeInt8,buf.writeInt16LE,buf.writeInt32LE. buf.writeUIntBE(value, offset, byteLength)- Записывает
byteLengthбайтов значенияvalueвbufпо указанномуoffset, используя порядок байтов от старшего к младшему. Поддерживает точность до 48 бит. ПараметрbyteLength— целое число от 1 до 6, задающее количество считываемых байтов.Также поддерживаются следующие аналогичные методы:
buf.writeUInt8,buf.writeUInt16BE,buf.writeUInt32BE. buf.writeUIntLE(value, offset, byteLength)- Записывает
byteLengthбайтов значенияvalueвbufпо указанномуoffset, используя порядок байтов от младшего к старшему. Поддерживает точность до 48 бит. ПараметрbyteLength— целое число от 1 до 6, задающее количество считываемых байтов.Также поддерживаются следующие аналогичные методы:
buf.writeUInt8,buf.writeUInt16LE,buf.writeUInt32LE. buf.writeDoubleBE(value, [offset])- Записывает
valueвbufпо указанномуoffset, используя порядок байтов от старшего к младшему. buf.writeDoubleLE(value, [offset])- Записывает
valueвbufпо указанномуoffset, используя порядок байтов от младшего к старшему. buf.writeFloatBE(value, [offset])- Записывает
valueвbufпо указанномуoffset, используя порядок байтов от старшего к младшему. buf.writeFloatLE(value, [offset])- Записывает
valueвbufпо указанномуoffset, используя порядок байтов от младшего к старшему.
Криптография
crypto.createHash() |
crypto.createHmac() |
Начиная с версии 0.7.0, расширенный API криптографии доступен через глобальный объект crypto.
Модуль Crypto предоставляет поддержку криптографических функций. Объект модуля Crypto импортируется с помощью import crypto from 'crypto'.
Начиная с версии 0.9.7, для работы модуля Crypto требуется OpenSSL; для хеширования используется OpenSSL EVP, благодаря чему JavaScript-коду доступны все алгоритмы дайджестов, поддерживаемые подключённой библиотекой OpenSSL.
crypto.createHash(algorithm)- Создаёт и возвращает объект Hash, который можно использовать для формирования хеш-дайджестов с помощью указанного
algorithm. Алгоритмом может бытьmd5,sha1,sha256,sha384,sha512или любой другой алгоритм дайджеста, поддерживаемый подключённой библиотекой OpenSSL (начиная с версии 0.9.7). До версии 0.9.7 поддерживались толькоmd5,sha1иsha256. crypto.createHmac(algorithm, secret key)- Создаёт и возвращает объект HMAC, использующий указанные
algorithmиsecret key. Алгоритмом может бытьmd5,sha1,sha256,sha384,sha512или любой другой алгоритм дайджеста, поддерживаемый подключённой библиотекой OpenSSL (начиная с версии 0.9.7). До версии 0.9.7 поддерживались толькоmd5,sha1иsha256.
Hash
hash.update() |
hash.digest() |
hash.update(data)- Дополняет содержимое хеша указанным
data. hash.digest([encoding])- Вычисляет дайджест всех данных, переданных с помощью
hash.update(). Кодировкой может бытьhex,base64илиbase64url. Если кодировка не указана, возвращается объект Buffer (0.4.4).До версии (0.4.4) вместо объекта Buffer возвращалась байтовая строка.
hash.copy()- Создаёт копию текущего состояния хеша (начиная с версии 0.7.12).
import crypto from 'crypto';
crypto.createHash('sha1').update('A').update('B').digest('base64url');
/* BtlFlCqiamG-GMPiK_GbvKjdK10 */
HMAC
hmac.update() |
hmac.digest() |
hmac.update(data)- Дополняет содержимое HMAC указанным
data. hmac.digest([encoding])- Вычисляет дайджест HMAC всех данных, переданных с помощью
hmac.update(). Кодировкой может бытьhex,base64илиbase64url. Если кодировка не указана, возвращается объект Buffer (0.4.4).До версии 0.4.4 вместо объекта Buffer возвращалась байтовая строка.
import crypto from 'crypto';
crypto.createHmac('sha1', 'secret.key').update('AB').digest('base64url');
/* Oglm93xn23_MkiaEq_e9u8zk374 */
Файловая система
fs.Dirent |
fs.FileHandle |
fs.Stats |
File Access Constants |
File System Flags |
Модуль File System предоставляет операции для работы с файлами.
Объект модуля импортируется с помощью import fs from 'fs'. Начиная с версии 0.3.9, асинхронные версии методов файловой системы доступны через объект fs.promises после импорта с помощью import fs from 'fs':
import fs from 'fs';
fs.promises.readFile("/file/path").then((data) => {
/* <file data> */
});
accessSync(path[, mode])- Синхронно проверяет разрешения для файла или каталога, указанного в
path(0.3.9). Если проверка завершается неудачно, возвращается ошибка, в противном случае метод возвращает undefined.mode- необязательное целое число, указывающее проверки доступности, которые необходимо выполнить; по умолчанию —
fs.constants.F_OKtry { fs.accessSync('/file/path', fs.constants.R_OK | fs.constants.W_OK); console.log('has access'); } catch (e) { console.log('no access');) }
appendFileSync(filename, data[, options])- Синхронно добавляет указанные
dataв файл с заданнымfilename. Ожидается, чтоdataбудет строкой или объектом Buffer (0.4.4). Если файл не существует, он будет создан. Параметрoptionsдолжен быть объектом со следующими ключами:mode- параметр режима; по умолчанию —
0o666 flag- флаг файловой системы; по умолчанию —
a
closeSync(fd)- Закрывает файловый дескриптор
fd, представленный целым числом, который используется методом. Возвращаетundefined. existsSync(path)- Логическое значение: возвращает
true, если указанныйpathсуществует. (0.8.2) fstatSync(fd)- Получает объект
fs.Statsдля файлового дескриптора (0.7.7). Параметрfd— целое число, представляющее используемый методом файловый дескриптор. lstatSync(path[, options])- Синхронно получает объект
fs.Statsдля символической ссылки, на которую указываетpath(0.7.1). Параметрoptionsдолжен быть объектом со следующими ключами:throwIfNoEntry- логическое значение, указывающее, следует ли выбрасывать исключение, если запись файловой системы не существует, вместо возврата
undefined; по умолчанию —false.
mkdirSync(path[, options])- Синхронно создает каталог по указанному
path(0.4.2). Параметрoptionsдолжен бытьinteger, задающим режим, либо объектом со следующими ключами:mode- параметр режима; по умолчанию —
0o777.
openSync(path[, flags[, mode]])- Возвращает целое число, представляющее файловый дескриптор открытого файла
path(0.7.7).flags- флаг файловой системы; по умолчанию —
r mode- параметр режима; по умолчанию —
0o666
promises.open(path[, flags[, mode]])- Возвращает объект
FileHandle, представляющий открытый файлpath(0.7.7).flags- флаг файловой системы; по умолчанию —
r mode- параметр режима; по умолчанию —
0o666
readdirSync(path[, options])- Синхронно считывает содержимое каталога по указанному
path(0.4.2). Параметрoptionsдолжен быть строкой, задающей кодировку, либо объектом со следующими ключами:encoding- кодировка; по умолчанию —
utf8. В качестве кодировки можно указатьutf8иbuffer(0.4.4). withFileTypes- если задано значение
true, массив файлов будет содержать объектыfs.Dirent; по умолчанию —false.
readFileSync(filename[, options])- Синхронно возвращает содержимое файла с заданным
filename. Параметрoptionsсодержитstring, задающий кодировку. Если кодировка указана, возвращается строка, в противном случае возвращается объект Buffer (0.4.4).До версии 0.4.4, если кодировка не была указана, возвращалась байтовая строка.
В противном случаеoptionsдолжен быть объектом со следующими ключами:encoding- кодировка; по умолчанию не указана. В качестве кодировки можно указать
utf8,hex(0.4.4),base64(0.4.4),base64url(0.4.4). flag- флаг файловой системы; по умолчанию —
r
import fs from 'fs'; var file = fs.readFileSync('/file/path.tar.gz'); console.log(file.slice(0,2).toString('hex')) /* '1f8b' */ readlinkSync(path[, options])- Синхронно получает содержимое символической ссылки
pathс помощью readlink(2) (0.8.7). Аргументoptionsможет быть строкой, задающей кодировку, или объектом со свойствомencoding, задающим используемую кодировку символов. Еслиencoding—buffer, результат возвращается как объектBuffer, в противном случае — как строка. readSync(fd, buffer, offset[, length[, position]])- Считывает содержимое файла с помощью файлового дескриптора
fdи возвращает количество прочитанных байтов (0.7.7).buffer- значением
bufferможет бытьBuffer,TypedArrayилиDataView offset-
integer, представляющее позицию в буфере, с которой следует записать данные length-
integer, представляющее количество байтов для чтения position- задает начальную позицию чтения в файле; значение может быть
integerилиnull; по умолчанию —null. Еслиpositionимеет значениеnull, данные считываются с текущей позиции файла, и позиция файла обновляется. Если позиция являетсяinteger, позиция файла не изменяется
realpathSync(path[, options])- Синхронно вычисляет каноническое имя пути, разрешая
.,..и символические ссылки с помощью realpath(3). Аргументoptionsможет быть строкой, задающей кодировку, или объектом со свойством encoding, задающим кодировку символов для пути, передаваемого обратному вызову (0.3.9). renameSync(oldPath, newPath)- Синхронно переименовывает файл или перемещает его из
oldPathвnewPath(0.3.4).import fs from 'fs'; fs.renameSync('hello.txt', 'HelloWorld.txt'); rmdirSync(path)- Синхронно удаляет каталог по указанному
path(0.4.2). statSync(path,[ options])- Синхронно получает объект
fs.Statsдля указанногоpath(0.7.1).pathможет бытьstringилиbuffer. Параметрoptionsдолжен быть объектом со следующими ключами:throwIfNoEntry- логическое значение, указывающее, следует ли выбрасывать исключение, если запись файловой системы не существует, вместо возврата
undefined; по умолчанию —true.
symlinkSync(target, path)- Синхронно создает ссылку с именем
path, указывающую наtarget, с помощью symlink(2) (0.3.9). Относительные целевые пути отсчитываются от родительского каталога ссылки. unlinkSync(path)- Синхронно удаляет ссылку на файл по
path(0.3.9). writeFileSync(filename, data[, options])- Синхронно записывает
dataв файл с заданнымfilename. Ожидается, чтоdataбудет строкой или объектом Buffer (0.4.4). Если файл не существует, он будет создан; если файл существует, он будет заменен. Параметрoptionsдолжен быть объектом со следующими ключами:mode- параметр режима; по умолчанию —
0o666 flag- флаг файловой системы; по умолчанию —
w
import fs from 'fs'; fs.writeFileSync('hello.txt', 'Hello world'); writeSync(fd, buffer, offset[, length[, position]])- Записывает буфер в файл с помощью файлового дескриптора и возвращает количество записанных байтов
number(0.7.7).fd-
integer, представляющее файловый дескриптор buffer- значением
bufferможет бытьBuffer,TypedArrayилиDataView offset-
integer, определяющее часть буфера для записи; по умолчанию —0 length-
integer, задающее количество байтов для записи; по умолчанию — смещение, равное Buffer.byteLength position- задает смещение от начала файла, по которому следует записать эти данные; может быть
integerилиnull; по умолчанию —null. См. также pwrite(2).
writeSync(fd, string[, position[, encoding]])- Записывает
stringв файл с помощью файлового дескриптораfdи возвращает количество записанных байтовnumber(0.7.7).fd-
integer, представляющее файловый дескриптор position- задает смещение от начала файла, по которому следует записать эти данные; может быть
integerилиnull; по умолчанию —null. См. также pwrite(2) encoding- это
string; по умолчанию —utf8
fs.Dirent
fs.Dirent представляет собой запись каталога — файл или подкаталог. Если readdirSync() вызывается с параметром withFileTypes, результирующий массив содержит объекты fs.Dirent.
-
dirent.isBlockDevice()— возвращаетtrue, если объектfs.Direntописывает блочное устройство. -
dirent.isCharacterDevice()— возвращаетtrue, если объектfs.Direntописывает символьное устройство. -
dirent.isDirectory()— возвращаетtrue, если объектfs.Direntописывает каталог файловой системы. -
dirent.isFIFO()— возвращаетtrue, если объектfs.Direntописывает канал FIFO (первым пришел — первым вышел). -
dirent.isFile()— возвращаетtrue, если объектfs.Direntописывает обычный файл. -
dirent.isSocket()— возвращаетtrue, если объектfs.Direntописывает сокет. -
dirent.isSymbolicLink()— возвращаетtrue, если объектfs.Direntописывает символическую ссылку. -
dirent.name— имя файла, на который ссылается объектfs.Dirent.
fs.FileHandle
filehandle.close() |
filehandle.fd |
filehandle.read() |
filehandle.stat() |
filehandle.write(buf) |
filehandle.write(str) |
Объект FileHandle является оболочкой для числового файлового дескриптора (0.7.7). Экземпляры объекта FileHandle создаются методом fs.promises.open(). Если FileHandle не закрыт с помощью метода filehandle.close(), он попытается автоматически закрыть файловый дескриптор, помогая предотвратить утечки памяти. Не полагайтесь на такое поведение, поскольку оно может быть ненадежным. Вместо этого всегда явно закрывайте FileHandle.
filehandle.close()- Закрывает файловый дескриптор после завершения всех ожидающих операций с ним. Возвращает
promise, который при успешном выполнении разрешается значением undefined. filehandle.fd- Числовой файловый дескриптор, которым управляет объект
FileHandle. filehandle.read(buffer, offset[, length[, position]])- Считывает данные из файла и сохраняет их в указанном буфере.
buffer- буфер, который будет заполнен считанными данными из файла; значением может быть
Buffer,TypedArrayилиDataView offset-
integer, задающее позицию в буфере, с которой начинается заполнение length-
integer, задающее количество байтов для чтения position- позиция, с которой следует начать чтение данных из файла; значение может быть
integer,null. Если заданоnull, данные считываются с текущей позиции файла, которая затем обновляется. Если позиция являетсяinteger, текущая позиция файла не изменяется.
Promise, который при успешном выполнении разрешается объектом с двумя свойствами:bytesRead-
integer, представляющее количество прочитанных байтов buffer- ссылка на переданный аргумент буфера; может быть
Buffer,TypedArrayилиDataView
filehandle.stat()- Возвращает
promise, который разрешается объектом fs.Stats для файла. filehandle.write(buffer, offset[, length[, position]])- Записывает буфер в файл.
buffer- значением
bufferможет бытьBuffer,TypedArrayилиDataView offset-
integer, задающее начальную позицию внутри буфера, откуда начинаются записываемые данные length-
integer, задающее количество записываемых байтов из буфера; по умолчанию — смещение, равное Buffer.byteLength position- смещение от начала файла, по которому следует записать данные из буфера; может быть
integerилиnull; по умолчанию —null. Еслиpositionне являетсяnumber, данные записываются в текущую позицию. Подробности см. в документации POSIX по pwrite(2).
Promise, который разрешается объектом с двумя свойствами:bytesWritten-
integer, представляющее количество записанных байтов buffer- ссылка на записанный буфер; это может быть
Buffer,TypedArrayилиDataView
Небезопасно использовать
filehandle.write()несколько раз для одного файла, не дождавшись выполнения или отклонения промиса. filehandle.write(string[, position[, encoding]])- Записывает
stringв файл.position- смещение от начала файла, по которому следует записать данные из буфера; может быть
integerилиnull; по умолчанию —null. Еслиpositionне являетсяnumber, данные записываются в текущую позицию. Подробности см. в документации POSIX по pwrite(2). encoding- ожидаемая кодировка строки; по умолчанию —
utf8
Promise, который разрешается объектом с двумя свойствами:bytesWritten-
integer, представляющее количество записанных байтов buffer- ссылка на записанный буфер; это может быть
Buffer,TypedArrayилиDataView
Небезопасно использовать
filehandle.write()несколько раз для одного файла, не дождавшись выполнения или отклонения промиса.
fs.Stats
Объект fs.Stats предоставляет сведения о файле. Этот объект возвращается методами fs.statSync() и fs.lstatSync().
-
stats.isBlockDevice()— возвращаетtrue, если объектfs.Statsописывает блочное устройство. -
stats.isDirectory()— возвращаетtrue, если объектfs.Statsописывает каталог файловой системы. -
stats.isFIFO()— возвращаетtrue, если объектfs.Statsописывает канал FIFO (первым пришел — первым вышел). -
stats.isFile()— возвращаетtrue, если объектfs.Statsописывает обычный файл. -
stats.isSocket()— возвращаетtrue, если объектfs.Statsописывает сокет. -
stats.isSymbolicLink()— возвращаетtrue, если объектfs.Statsописывает символическую ссылку. -
stats.dev— числовой идентификатор устройства, содержащего файл. -
stats.ino— специфичный для файловой системы номерInodeфайла. -
stats.mode— битовое поле, описывающее тип файла и режим доступа. -
stats.nlink— количество жестких ссылок на файл. -
stats.uid— числовой идентификатор пользователя, владеющего файлом (POSIX). -
stats.gid— числовой идентификатор группы, владеющей файлом (POSIX). -
stats.rdev— числовой идентификатор устройства, если файл представляет устройство. -
stats.size— размер файла в байтах. -
stats.blksize— размер блока файловой системы для операций ввода-вывода. -
stats.blocks— количество блоков, выделенных для этого файла. -
stats.atimeMs— временная метка последнего обращения к файлу, выраженная в миллисекундах с начала эпохи POSIX. -
stats.mtimeMs— временная метка последнего изменения файла, выраженная в миллисекундах с начала эпохи POSIX. -
stats.ctimeMs— временная метка последнего изменения метаданных файла, выраженная в миллисекундах с начала эпохи POSIX. -
stats.birthtimeMs— временная метка создания файла, выраженная в миллисекундах с начала эпохи POSIX. -
stats.atime— временная метка последнего обращения к файлу. -
stats.mtime— временная метка последнего изменения файла. -
stats.ctime— временная метка последнего изменения метаданных файла. -
stats.birthtime— временная метка создания файла.
Константы доступа к файлам
Метод access() может принимать следующие флаги. Эти флаги экспортируются объектом fs.constants:
-
F_OK— указывает, что файл виден вызывающему процессу; используется по умолчанию, если режим не задан -
R_OK— указывает, что вызывающий процесс может читать файл -
W_OK— указывает, что вызывающий процесс может записывать в файл -
X_OK— указывает, что вызывающий процесс может выполнять файл
Флаги файловой системы
Параметр flag может принимать следующие значения:
-
a— открыть файл для добавления данных. Если файл не существует, он будет создан -
ax— то же, что иa, но вызовет ошибку, если файл уже существует -
a+— открыть файл для чтения и добавления данных. Если файл не существует, он будет создан -
ax+— то же, что иa+, но вызовет ошибку, если файл уже существует -
as— открыть файл для добавления данных в синхронном режиме. Если файл не существует, он будет создан -
as+— открыть файл для чтения и добавления данных в синхронном режиме. Если файл не существует, он будет создан -
r— открыть файл для чтения. Если файл не существует, возникнет исключение -
r+— открыть файл для чтения и записи. Если файл не существует, возникнет исключение -
rs+— открыть файл для чтения и записи в синхронном режиме. Указывает операционной системе обходить локальный кэш файловой системы -
w— открыть файл для записи. Если файл не существует, он будет создан. Если файл существует, он будет заменен -
wx— то же, что иw, но вызовет ошибку, если файл уже существует -
w+— открыть файл для чтения и записи. Если файл не существует, он будет создан. Если файл существует, он будет заменен -
wx+— то же, что иw+, но вызовет ошибку, если файл уже существует
Строка запроса
querystring.decode() |
querystring.encode() |
querystring.escape() |
querystring.parse() |
querystring.stringify() |
querystring.unescape() |
Модуль Query String обеспечивает поддержку разбора и форматирования строк запроса URL (0.4.3). Объект модуля Query String импортируется с помощью import qs from 'querystring'.
querystring.decode()- является псевдонимом
querystring.parse(). querystring.encode()- является псевдонимом
querystring.stringify(). querystring.escape(string)-
Выполняет URL-кодирование заданного
stringи возвращает экранированную строку запроса. Метод используется методомquerystring.stringify()и не должен вызываться напрямую. querystring.parse(string[, separator[, equal[, options]]])-
Разбирает строку запроса URL и возвращает объект.
Параметр
separator— подстрока-разделитель пар ключ-значение в строке запроса; по умолчанию — «&».Параметр
equal— подстрока-разделитель ключей и значений в строке запроса; по умолчанию — «=».Параметр
optionsдолжен быть объектом со следующими ключами:-
decodeURIComponentfunction - Функция, используемая для декодирования символов, закодированных в формате percent-encoding в строке запроса; по умолчанию —
querystring.unescape() -
maxKeysnumber - максимальное количество ключей для разбора; по умолчанию —
1000. Значение0снимает ограничение на количество ключей.
По умолчанию предполагается, что символы строки запроса, закодированные в формате percent-encoding, используют кодировку UTF-8; недопустимые последовательности UTF-8 заменяются символом замены
U+FFFD.Например, для следующей строки запроса
'foo=bar&abc=xyz&abc=123'
результат будет следующим:
{ foo: 'bar', abc: ['xyz', '123'] } -
querystring.stringify(object[, separator[, equal[, options]]])-
Сериализует объект и возвращает строку запроса URL.
Параметр
separator— подстрока-разделитель пар ключ-значение в строке запроса; по умолчанию — «&».Параметр
equal— подстрока-разделитель ключей и значений в строке запроса; по умолчанию — «=».Параметр
optionsдолжен быть объектом со следующими ключами:-
encodeURIComponentfunction - Функция для преобразования небезопасных для URL символов в строке запроса в формат percent-encoding; по умолчанию —
querystring.escape().
По умолчанию символы строки запроса, требующие кодирования в формате percent-encoding, кодируются в UTF-8. Если требуется другая кодировка, следует указать параметр
encodeURIComponent.Например, для следующей команды
querystring.stringify({ foo: 'bar', baz: ['qux', 'quux'], 123: '' });строка запроса будет такой:
'foo=bar&baz=qux&baz=quux&123='
-
querystring.unescape(string)-
Декодирует символы
string, закодированные в URL в формате percent-encoding, и возвращает неэкранированную строку запроса. Метод используется методомquerystring.parse()и не должен вызываться напрямую.
XML
xml.parse() |
xml.c14n() |
xml.exclusiveC14n() |
xml.serialize() |
xml.serializeToString() |
XMLDoc |
XMLNode |
XMLAttr |
Модуль XML позволяет работать с XML-документами (начиная с версии 0.7.10). Объект модуля XML импортируется с помощью import xml from 'xml'.
Пример:
import xml from 'xml'; let data = `<note><to b="bar" a= "foo" >Tove</to><from>Jani</from></note>`; let doc = xml.parse(data); console.log(doc.note.to.$text) /* 'Tove' */ console.log(doc.note.to.$attr$b) /* 'bar' */ console.log(doc.note.$tags[1].$text) /* 'Jani' */ let dec = new TextDecoder(); let c14n = dec.decode(xml.exclusiveC14n(doc.note)); console.log(c14n) /* '<note><to a="foo" b="bar">Tove</to><from>Jani</from></note>' */ c14n = dec.decode(xml.exclusiveC14n(doc.note.to)); console.log(c14n) /* '<to a="foo" b="bar">Tove</to>' */ c14n = dec.decode(xml.exclusiveC14n(doc.note, doc.note.to /* excluding 'to' */)); console.log(c14n) /* '<note><from>Jani</from></note>' */
parse(string | Buffer)- Разбирает строку или Buffer как XML-документ и возвращает объект-обёртку
XMLDoc, представляющий разобранный XML-документ. c14n(root_node[, excluding_node])- Канонизирует
root_nodeи его дочерние узлы в соответствии с Canonical XML Version 1.1.root_nodeможет быть объектом-обёрткойXMLNodeилиXMLDocдля XML-структуры. Возвращает объект Buffer, содержащий канонизированный результат.excluding_node- позволяет исключить часть документа из результата
exclusiveC14n(root_node[, excluding_node[, withComments [,prefix_list]]])- Канонизирует
root_nodeи его дочерние узлы в соответствии с Exclusive XML Canonicalization Version 1.0.root_node- является объектом-обёрткой
XMLNodeилиXMLDocдля XML-структуры excluding_node- позволяет исключить из результата часть документа, соответствующую узлу и его дочерним узлам
withComments- логическое значение, по умолчанию —
false. Еслиtrue, канонизация соответствует Exclusive XML Canonicalization Version 1.0. Возвращает объект Buffer, содержащий канонизированный результат. prefix_list- необязательная строка со списком через пробел префиксов пространств имён, которые также следует включить в результат
serialize()- То же, что и
xml.c14n()(начиная с версии 0.7.11). serializeToString()- То же, что и
xml.c14n(), но результат возвращается в видеstring(начиная с версии 0.7.11). XMLDoc- Объект-обёртка XMLDoc для XML-структуры — корневой узел документа.
doc.$root- корневой элемент документа по его имени или undefined
doc.abc- первый корневой тег с именем
abcв виде объекта-обёрткиXMLNode
XMLNode- Объект-обёртка XMLNode для узла XML-тега.
node.abc- то же, что и
node.$tag$abc node.$attr$abc- значение атрибута узла
abc; доступно для записи начиная с версии 0.7.11 -
node.$attr$abc=xyz - то же, что и
node.setAttribute('abc', xyz)(начиная с версии 0.7.11) node.$attrs- объект-обёртка
XMLAttrдля всех атрибутов узла node.$name- имя узла
node.$ns- пространство имён узла
node.$parent- родительский узел текущего узла
node.$tag$abc- первый дочерний тег узла с именем
abc; доступно для записи начиная с версии 0.7.11 - массив всех дочерних тегов
- то же, что и
node.removeChildren();node.addChild(node1);node.addChild(node2)(начиная с версии 0.7.11). - все дочерние теги узла с именем
abc; доступно для записи начиная с версии 0.7.11 node.$text- содержимое узла; доступно для записи начиная с версии 0.7.11
node.$text = 'abc'- то же, что и
node.setText('abc')(начиная с версии 0.7.11) node.addChild(nd)- добавляет XMLNode в качестве дочернего узла (начиная с версии 0.7.11). Перед добавлением в узел
ndрекурсивно копируется node.removeAllAttributes()- удаляет все атрибуты узла (начиная с версии 0.7.11)
node.removeAttribute(attr_name)- удаляет атрибут с именем
attr_name(начиная с версии 0.7.11) node.removeChildren(tag_name)- удаляет все дочерние теги с именем
tag_name(начиная с версии 0.7.11). Еслиtag_nameотсутствует, удаляются все дочерние теги node.removeText()- удаляет текстовое значение узла (0.7.11)
node.setAttribute(attr_name, value)- задаёт значение для
attr_name(начиная с версии 0.7.11). Если значение равноnull, атрибут с именемattr_nameудаляется node.setText(value)- задаёт текстовое значение узла (начиная с версии 0.7.11). Если значение равно
null, текст узла удаляется.
XMLAttr- Объект-обёртка XMLAttrs для атрибутов XML-узла.
attr.abc- значение атрибута
abc
zlib
zlib.deflateRawSync() |
zlib.deflateSync() |
zlib.inflateRawSync() |
zlib.inflateSync() |
Модуль zlib предоставляет функции сжатия с использованием алгоритмов “deflate” и “inflate” (начиная с версии 0.7.12). Объект модуля zlib импортируется с помощью import zlib from 'zlib'.
deflateRawSync(string | Buffer[, options])- Сжимает данные с помощью алгоритма “deflate”, переданные в виде строки или Buffer, и не добавляет заголовок zlib. Значение буфера может быть
Buffer,TypedArrayилиDataView.Options— необязательный объект, содержащий параметры zlib. Возвращает экземпляр Buffer со сжатыми данными. deflateSync(string | Buffer[, options])- Сжимает данные с помощью алгоритма “deflate”, переданные в виде строки или Buffer. Значение Buffer может быть
Buffer,TypedArrayилиDataView.Options— необязательный объект, содержащий параметры zlib. Возвращает экземпляр Buffer со сжатыми данными. inflateRawSync(string | Buffer)- Распаковывает необработанный поток с помощью алгоритма “deflate”. Возвращает экземпляр Buffer с распакованными данными.
inflateSync(string | Buffer)- Распаковывает поток с помощью алгоритма “deflate”. Возвращает экземпляр Buffer с распакованными данными.
параметры zlib
-
chunkSize— целое число; значение по умолчанию —1024 -
dictionary— этоBuffer,TypedArrayилиDataView; по умолчанию — пустое значение -
level— целое число; только для сжатия, см. уровни сжатия zlib -
memLevel— целое число от1до9; только для сжатия -
strategy— целое число; только для сжатия, см. стратегии сжатия zlib -
windowBits— целое число от-15до-9для необработанных данных и от9до15для обычного потока
уровни сжатия zlib
| Название | Описание |
zlib.constants.Z_NO_COMPRESSION |
без сжатия |
zlib.constants.Z_BEST_SPEED |
самый быстрый вариант, обеспечивает наименьшую степень сжатия |
zlib.constants.Z_DEFAULT_COMPRESSION |
компромисс между скоростью и степенью сжатия |
zlib.constants.Z_BEST_COMPRESSION |
самый медленный вариант, обеспечивает наибольшую степень сжатия |
стратегии сжатия zlib
| Название | Описание |
zlib.constants.Z_FILTERED |
Стратегия фильтрации: для данных, полученных с помощью фильтра или предиктора |
zlib.constants.Z_HUFFMAN_ONLY |
Стратегия только с кодированием Хаффмана: только кодирование Хаффмана, без поиска совпадений строк |
zlib.constants.Z_RLE |
Стратегия кодирования длин серий: расстояние совпадений ограничено единицей; лучшее сжатие данных изображений PNG |
zlib.constants.Z_FIXED |
Стратегия фиксированной таблицы: предотвращает использование динамических кодов Хаффмана; упрощает декодер для специальных приложений |
zlib.constants.Z_DEFAULT_STRATEGY |
Стратегия по умолчанию, подходит для сжатия данных общего назначения |
© 2002-2021 Igor Sysoev
© 2011-2026 Nginx, Inc.
Licensed under the BSD License.
https://nginx.org/en/docs/njs/reference.html