Справочник API NJS#
Модуль NJS предоставляет объекты, методы и свойства для расширения функциональности Angie.
Данный справочник содержит только специфичные для NJS свойства, методы и модули, не соответствующие ECMAScript. Определения свойств и методов NJS, соответствующих ECMAScript, можно найти в спецификации ECMAScript. Объект HTTP-запроса доступен только в модуле HTTP JS. До версии 0.8.5 все строковые свойства объекта были байтовыми строками. Объект аргументов запроса, только для чтения. Строка запроса возвращается в виде объекта. Начиная с версии 0.7.6 дублирующиеся ключи возвращаются в виде массива, ключи чувствительны к регистру, как ключи, так и значения декодируются из процентной кодировки. Например, строка запроса преобразуется в Более сложные сценарии разбора можно реализовать с помощью модуля Query String и переменной Объект аргументов вычисляется при первом обращении к В этом случае объект переменных Angie возвращает первое значение для заданного ключа, без учета регистра и без декодирования процентной кодировки. Для преобразования После вызова этой функции следующие фрагменты данных будут передаваться клиенту без вызова Записывает Примечание Поскольку в Angie жестко задано ограничение максимальной длины строки, в журнал может быть записано только первые 2048 байт строки. Завершает отправку ответа клиенту. Объект входящих заголовков, только для чтения. Заголовок запроса Заголовки запроса Объект исходящих заголовков для основного запроса, для записи. Если Заголовок ответа Исходящие заголовки должны быть установлены до отправки заголовка ответа клиенту; в противном случае обновление заголовка будет проигнорировано. Это означает, что обработчике обработчике Значения полей многозначных заголовков ответа (0.4.0) могут быть установлены с помощью синтаксиса: где результат будет: Все предыдущие значения полей заголовка ответа Для стандартных заголовков ответа, которые принимают только одно значение поля, таких как Версия HTTP, только для чтения. Логическое значение, Выполняет внутреннее перенаправление на указанный Примечание После перенаправления в целевом location запускается новая виртуальная машина NJS, а виртуальная машина в исходном location останавливается. Значения переменных Angie сохраняются и могут использоваться для передачи информации в целевой location. Начиная с версии 0.5.3 может использоваться переменная, объявленная с помощью директивы Примечание Начиная с версии 0.7.4 метод принимает экранированные URI. Записывает Примечание Поскольку в Angie жестко задано ограничение максимальной длины строки, в журнал может быть записано только первые 2048 байт строки. HTTP-метод, только для чтения. Ссылка на объект родительского запроса. Адрес клиента, только для чтения. Свойство устарело в версии 0.5.0 и было удалено в версии 0.8.0. Вместо него следует использовать свойство Тело запроса клиента, если оно не было записано во временный файл (начиная с версии 0.5.0). Чтобы тело запроса клиента находилось в памяти, его размер должен быть ограничен директивой То же, что и Возвращает массив пар ключ-значение точно так, как они были получены от клиента (0.4.1). Например, при следующих заголовках запроса: вывод Все заголовки результат будет: Имена полей заголовков не преобразуются в нижний регистр, дублирующиеся значения полей не объединяются. Возвращает массив пар ключ-значение заголовков ответа (0.4.1). Имена полей заголовков не преобразуются в нижний регистр, дублирующиеся значения полей не объединяются. Свойство устарело в версии 0.5.0 и было удалено в версии 0.8.0. Вместо него следует использовать свойство Содержит тело ответа подзапроса, только для чтения (начиная с версии 0.5.0). Размер То же, что и Отправляет полный ответ с указанным В качестве второго аргумента можно указать либо URL перенаправления (для кодов 301, 302, 303, 307 и 308), либо текст тела ответа (для других кодов). Отправляет часть тела ответа клиенту. Отправляемые данные могут быть строкой или буфером Buffer (0.5.0). Добавляет данные в цепочку фрагментов данных, которые будут переданы следующему фильтру тела (0.5.2). Фактическая передача происходит позже, когда все фрагменты данных текущей цепочки обработаны. Данные могут быть строкой или буфером Buffer. Логическое значение, Логическое значение, Метод может вызываться только из функции Отправляет HTTP-заголовки клиенту. Устанавливает возвращаемое значение обработчика Статус, для записи. Создает подзапрос с заданными Подзапрос разделяет свои входящие заголовки с клиентским запросом. Для отправки заголовков, отличных от исходных, прокси-серверу можно использовать директиву Если Строка аргументов, по умолчанию используется пустая строка. Тело запроса, по умолчанию используется тело запроса родительского объекта запроса. HTTP-метод, по умолчанию используется метод Логический флаг (0.3.9); если Обратный вызов завершения Начиная с версии 0.3.8, если Например, для просмотра всех заголовков ответа в подзапросе: Текущий URI в запросе, нормализованный, только для чтения. Переменные Angie в виде буферов, для записи (начиная с версии 0.5.0). Объект переменных Angie, для записи (начиная с версии 0.2.8). Например, для получения переменной Начиная с версии 0.8.6 к захватам регулярных выражений можно обращаться с помощью следующего синтаксиса: Angie обрабатывает переменные, на которые есть ссылки в Переменная доступна для записи, если: она была создана с помощью директивы на нее есть ссылка в файле конфигурации Angie Тем не менее, некоторым встроенным переменным все еще нельзя присвоить значение (например, Записывает Примечание Поскольку в Angie жестко задано ограничение максимальной длины строки, в журнал может быть записано только первые 2048 байт строки. Объект stream-сессии доступен только в модуле Stream JS. До версии 0.8.5 все строковые свойства объекта были байтовыми строками. Псевдоним для Псевдоним для Псевдоним для Устанавливает код выхода Возможные значения кода: Может вызываться только из функции-обработчика фазы: Записывает отправленную Примечание Поскольку в Angie жестко задано ограничение максимальной длины строки, в журнал может быть записано только первые 2048 байт строки. Записывает отправленную Примечание Поскольку в Angie жестко задано ограничение максимальной длины строки, в журнал может быть записано только первые 2048 байт строки. Отменяет регистрацию обратного вызова, установленного методом Регистрирует Новые данные (строка) от клиента. Новые данные (строка) клиенту. Новые данные (буфер) от клиента (начиная с версии 0.5.0). Новые данные (буфер) клиенту (начиная с версии 0.5.0). Обратный вызов завершения имеет следующий прототип: Логическое значение, Адрес клиента, только для чтения. Переменные Angie в виде буферов, для записи (начиная с версии 0.5.0). Добавляет данные в цепочку фрагментов данных, которые будут переданы в прямом направлении: в обратном вызове download клиенту; в upload восходящему серверу (0.2.4). Фактическая передача происходит позже, когда все фрагменты данных текущей цепочки обработаны. Данные могут быть строкой или буфером Buffer (0.5.0). Логическое значение, Логическое значение, Метод может вызываться несколько раз за вызов обратного вызова. Идентичен Идентичен Код статуса сессии, псевдоним переменной Устанавливает возвращаемое значение обработчика Объект переменных Angie, для записи (начиная с версии 0.2.8). Переменная может быть доступна для записи только в том случае, если на нее есть ссылка в файле конфигурации Angie. Тем не менее, некоторым встроенным переменным все еще нельзя присвоить значение. Записывает отправленную Примечание Поскольку в Angie жестко задано ограничение максимальной длины строки, в журнал может быть записано только первые 2048 байт строки. Объект Переменные Angie в виде буферов, для записи. Объект переменных Angie, для записи. Интерфейс Новый объект Объект, содержащий HTTP-заголовки для предварительного заполнения объекта Новый объект Добавляет новое значение в существующий заголовок в объекте Удаляет заголовок из объекта Возвращает строку, содержащую значения всех заголовков с указанным именем, разделенные запятой и пробелом. Возвращает массив, содержащий значения всех заголовков с указанным именем. Выполняет предоставленную функцию один раз для каждой пары ключ-значение в объекте Возвращает логическое значение, указывающее, существует ли заголовок с указанным именем. Устанавливает новое значение для существующего заголовка в объекте Интерфейс Новый объект Создает объект Тело запроса, по умолчанию пусто. Объект заголовков ответа — объект, содержащий HTTP-заголовки для предварительного заполнения объекта HTTP-метод, по умолчанию используется метод GET. Новый объект Возвращает Логическое значение, Содержит режим кэширования запроса. Содержит учетные данные запроса, по умолчанию Объект Возвращает Содержит метод запроса. Содержит режим запроса. Возвращает Содержит URL запроса. Интерфейс Новый объект Создает объект Объект заголовков ответа — объект, содержащий HTTP-заголовки для предварительного заполнения объекта Код состояния ответа. Сообщение о состоянии, соответствующее коду состояния. Новый объект Берет поток Логическое значение, Объект Берет поток Логическое значение, Логическое значение, Код состояния ответа. Сообщение о состоянии, соответствующее коду состояния. Берет поток Тип ответа. URL ответа. Глобальный объект Строка, содержащая опциональное имя сборки Angie, соответствует аргументу Строка, содержащая путь к файлу текущей конфигурации Angie (0.8.0). Строка, содержащая путь к префиксу конфигурации Angie — каталог, в котором Angie ищет конфигурацию (0.7.8). Строка, содержащая путь к файлу текущего журнала ошибок (0.8.0). Выполняет запрос для получения Если URL в Параметр Тело запроса, по умолчанию пусто. Размер буфера для чтения ответа, по умолчанию Объект заголовков запроса. Максимальный размер тела ответа в байтах, по умолчанию HTTP-метод, по умолчанию используется метод Включает или отключает проверку сертификата HTTPS-сервера, по умолчанию Пример: Записывает сообщение в журнал ошибок с указанным уровнем логирования. Параметр Примечание Поскольку в Angie жестко задано ограничение максимальной длины строки, в журнал может быть записано только первые 2048 байт строки. Строка, содержащая путь к префиксу Angie — каталогу, который содержит файлы сервера (0.8.0). Строка, содержащая версию Angie, например: Число, содержащее номер версии Angie, например: Число, соответствующее внутреннему идентификатору рабочего процесса Angie, значение между Объект Выводит одно или несколько сообщений об ошибках. Сообщение может быть строкой или объектом. Выводит одно или несколько информационных сообщений. Сообщение может быть строкой или объектом. Выводит одно или несколько сообщений журнала. Сообщение может быть строкой или объектом. Запускает таймер, который может отслеживать, сколько времени занимает операция. Параметр Останавливает таймер, ранее запущенный Выводит одно или несколько предупреждающих сообщений. Сообщение может быть строкой или объектом. Объект Получает криптографически надежные случайные значения. Возвращает тот же массив, переданный как Может быть Шифрует Объект, который определяет используемый алгоритм и любые дополнительные параметры, если требуется: Для Строка, должна быть установлена на Для Строка, должна быть установлена на Количество битов в блоке счетчика, используемых для фактического счетчика. Счетчик должен быть достаточно большим, чтобы не переполняться. Для Строка, должна быть установлена на Или вектор инициализации, это Для Строка, должна быть установлена на Или вектор инициализации, это (опционально) это (опционально, по умолчанию Расшифровывает зашифрованные данные. Возвращает Объект, который определяет используемый алгоритм и любые дополнительные параметры, если требуется. Значения, указанные для дополнительных параметров, должны совпадать со значениями, переданными в соответствующий вызов Для Строка, должна быть установлена на Для Строка, должна быть установлена на Количество битов в блоке счетчика, используемых для фактического счетчика. Счетчик должен быть достаточно большим, чтобы не переполняться. Для Строка, должна быть установлена на Или вектор инициализации, это Для Строка, должна быть установлена на Или вектор инициализации, это (опционально) это (опционально, по умолчанию Производит массив битов из базового ключа. Возвращает Объект, который определяет используемый алгоритм производства: Для Строка, должна быть установлена на Строка с алгоритмом дайджеста для использования: Для Строка, должна быть установлена на Строка с алгоритмом дайджеста для использования: Для Строка, должна быть установлена на Число, представляющее количество битов, которые нужно производить. Для совместимости с браузером число должно быть кратно Производит секретный ключ из главного ключа. Возможные значения: Объект, который определяет используемый алгоритм производства: Для Строка, должна быть установлена на Строка с алгоритмом дайджеста для использования: Для Строка, должна быть установлена на Строка с алгоритмом дайджеста для использования: Для Строка, должна быть установлена на Объект, который определяет алгоритм, для которого будет использован производный ключ: Для Строка, должна быть установлена на Строка с именем функции дайджеста для использования: (опционально) это Для Строка, должна быть установлена на Логическое значение, которое указывает, будет ли возможен экспорт ключа. Ключ для шифрования сообщений. Ключ для расшифровки сообщений. Ключ для подписания сообщений. Ключ для проверки подписей. Ключ для производства нового ключа. Ключ для производства битов. Ключ для обертывания ключа. Ключ для разворачивания ключа. Генерирует дайджест указанных данных. Принимает как аргументы идентификатор алгоритма дайджеста для использования и данные для дайджеста. Возвращает Строка, которая определяет функцию хеша для использования: Экспортирует ключ: принимает ключ как объект Строка, которая описывает формат данных, в котором должен быть экспортирован ключ, может быть следующей: Формат данных raw. Формат PKCS #8. Формат SubjectPublicKeyInfo. Формат JSON Web Key (JWK) (начиная с версии 0.7.10). Генерирует новый ключ для симметричных алгоритмов или пару ключей для алгоритмов с открытым ключом (начиная с версии 0.7.10). Возвращает Объект словаря, который определяет тип ключа для генерации и предоставляет дополнительные параметры, специфичные для алгоритма: Для Строка, должна быть установлена на Строка, которая представляет имя функции Для Строка, должна быть установлена на Строка, которая представляет имя эллиптической кривой для использования, может быть Для Строка, должна быть установлена на Строка, которая представляет имя функции (опционально) это число, которое представляет длину в битах ключа. Если опущено, длина ключа равна длине дайджеста, сгенерированного выбранной функцией дайджеста. Для Для Строка, должна быть установлена на Строка, которая представляет имя эллиптической кривой для использования, может быть Логическое значение, которое указывает, возможен ли экспорт ключа. Ключ для шифрования сообщений. Ключ для расшифровки сообщений. Ключ для подписания сообщений. Ключ для проверки подписей. Ключ для производства нового ключа. Ключ для производства битов. Ключ для обертывания ключа. Ключ для разворачивания ключа. Импортирует ключ: принимает ключ во внешнем, переносимом формате и дает объект Строка, которая описывает формат данных ключа для импорта, может быть следующей: Формат данных raw. Формат PKCS #8. Формат SubjectPublicKeyInfo. Формат JSON Web Key (JWK) (начиная с версии 0.7.10). Объект Объект словаря, который определяет тип ключа для импорта и предоставляет дополнительные параметры, специфичные для алгоритма: Для Строка, должна быть установлена на Строка, которая представляет имя функции Для Строка, должна быть установлена на Строка, которая представляет имя эллиптической кривой для использования, может быть Для Строка, должна быть установлена на Строка, которая представляет имя функции (опционально) это число, которое представляет длину в битах ключа. Если опущено, длина ключа равна длине дайджеста, сгенерированного выбранной функцией дайджеста. Для Для Для Для Строка, должна быть установлена на Строка, которая представляет имя эллиптической кривой для использования, может быть Логическое значение, которое указывает, возможен ли экспорт ключа. Ключ для шифрования сообщений. Ключ для расшифровки сообщений. Ключ для подписания сообщений. Ключ для проверки подписей. Ключ для производства нового ключа. Ключ для производства битов. Ключ для обертывания ключа. Ключ для разворачивания ключа. Возвращает Строка или объект, который определяет используемый алгоритм подписи и его параметры: Для Для Строка, должна быть установлена на Длинное Для Строка, должна быть установлена на Идентификатор алгоритма дайджеста для использования, может быть Для Объект Объект Проверяет цифровую подпись; возвращает Строка или объект, который определяет используемый алгоритм и его параметры: Для Для Строка, должна быть установлена на Длинное Для Строка, должна быть установлена на Идентификатор алгоритма дайджеста для использования, может быть Для Объект Объект Объект Возвращает объект, описывающий алгоритм, для которого этот ключ может быть использован, и любые связанные дополнительные параметры (начиная с версии 0.8.0), только для чтения. Логическое значение, Строковое значение, которое указывает, какой вид ключа представлен объектом, только для чтения. Возможные значения: Этот ключ — это секретный ключ для использования с симметричным алгоритмом. Этот ключ — это закрытая половина Этот ключ — это открытая половина Массив строк, указывающих, что этот ключ может быть использован для (начиная с версии 0.8.0), только для чтения. Возможные значения массива: Ключ для шифрования сообщений. Ключ для расшифровки сообщений. Ключ для подписания сообщений. Ключ для проверки подписей. Ключ для производства нового ключа. Ключ для производства битов. Объект Объект Объект Возвращает строку с текущей версией NJS (например, "0.7.4"). Возвращает число с текущей версией NJS. Например, "0.7.4" возвращается как Возвращает красиво отформатированное строковое представление значения. Объект, содержащий статистику использования памяти для текущего экземпляра VM (с версии 0.7.8). Объем памяти в байтах, занятый пулом памяти NJS от операционной системы. Регистрирует обработчик для указанного события VM (с версии 0.5.2). Событие может быть одной из следующих строк: Вызывается перед уничтожением VM. Обработчик вызывается без аргументов. Объект Возвращает массив, содержащий аргументы командной строки, переданные при запуске текущего процесса. Возвращает объект, содержащий переменные окружения пользователя. Примечание По умолчанию Angie удаляет все переменные окружения, унаследованные от родительского процесса, за исключением переменной TZ. Используйте директиву Отправляет сигнал процессу, идентифицируемому Возвращает PID текущего процесса. Возвращает PID родительского процесса текущего процесса. По умолчанию все строки в NJS — это Unicode-строки. Они соответствуют строкам ECMAScript, содержащим символы Unicode. До версии 0.8.0 также поддерживались байтовые строки. Примечание Начиная с версии 0.8.0, поддержка байтовых строк и методов байтовых строк была удалена. При работе с последовательностями байтов следует использовать объект Buffer и свойства Buffer, такие как Байтовые строки содержали последовательность байтов и использовались для сериализации Unicode строк во внешние данные и десериализации из внешних источников. Например, метод Следующие методы были объявлены устаревшими и удалены в версии 0.8.0: Создает новый объект Логический флаг, указывающий, должен ли Возвращает строку с именем кодировки, используемой Логический флаг, Логический флаг, Возвращает строку с текстом, декодированным из Логический флаг, указывающий, будут ли следующие данные в последующих вызовах Пример: Объект Возвращает вновь созданный Кодирует Кодирует Количество единиц UTF-16 кодовых точек из исходной Количество байтов, измененных в целевом Отменяет объект Вызывает Пример: Декодирует строку данных, которая была закодирована с использованием кодировки Подобный метод Пример: Создает строку ASCII в кодировке Base64 из двоичной строки. Параметр Метод может использоваться для кодирования данных, которые иначе могут вызвать проблемы связи, их передачи и затем использования метода Пример: Объект Подробную документацию по методам Buffer см. в документации Node.js по Buffer. Модуль Crypto предоставляет поддержку криптографической функциональности. Объект модуля Crypto импортируется с использованием Примечание Начиная с версии 0.7.0, расширенный API криптографии доступен как глобальный объект crypto. Создает и возвращает объект Hash, который может использоваться для генерации дайджестов хешей с использованием заданного Создает и возвращает объект HMAC, который использует заданный Обновляет содержимое хеша с заданными Вычисляет дайджест всех данных, переданных с использованием Примечание До версии 0.4.4 вместо объекта Buffer возвращалась байтовая строка. Создает копию текущего состояния хеша (с версии 0.7.12). Пример: Обновляет содержимое HMAC с заданными Вычисляет дайджест HMAC всех данных, переданных с использованием Примечание До версии 0.4.4 вместо объекта Buffer возвращалась байтовая строка. Модуль За более подробной документацией по методам fs обратитесь к
документации Node.js по fs. Модуль Query String предоставляет методы для парсинга и форматирования строк запроса URL. Объект модуля импортируется с использованием Псевдоним для Псевдоним для Выполняет процентное кодирование URL Парсит Функция, используемая при декодировании процентно-кодированных символов в строке запроса, по умолчанию: Максимальное количество ключей для парсинга, по умолчанию: Пример: Создает строку запроса URL из Функция, используемая при преобразовании небезопасных для URL символов в процентное кодирование в строке запроса, по умолчанию: Пример: Выполняет декодирование процентно-кодированных символов URL в Модуль XML позволяет работать с XML документами (с версии 0.7.10). Объект модуля XML импортируется с использованием Пример: Парсит строку или Buffer для XML документа; возвращает объект-обертку Канонизирует Позволяет исключить из вывода часть документа. Канонизирует Является объектом-оберткой Позволяет исключить из вывода часть документа, соответствующую узлу и его потомкам. Логическое значение, по умолчанию Опциональная строка с пробелами, разделяющими префиксы пространств имен для пространств имен, которые также должны быть включены в выход. То же самое, что То же самое, что Объект-обертка XMLDoc вокруг XML структуры, корневой узел документа. Корень документа по его имени или undefined. Первый корневой тег, названный Объект-обертка XMLNode вокруг узла XML тега. То же самое, что Значение атрибута узла То же самое, что Объект-обертка Имя узла. Пространство имен узла. Родительский узел текущего узла. Первый дочерний тег узла, названный Массив всех дочерних тегов. То же самое, что Все дочерние теги, названные Содержимое узла, доступно для записи с версии 0.7.11. То же самое, что Добавляет XMLNode как дочерний узел к узлу (с версии 0.7.11). Удаляет все атрибуты узла (с версии 0.7.11). Удаляет атрибут, названный Удаляет все дочерние теги, названные Удаляет текстовое значение узла (0.7.11). Устанавливает значение для Устанавливает текстовое значение для узла (с версии 0.7.11). Когда значение Объект-обертка XMLAttrs вокруг атрибутов узла XML. Значение атрибута Модуль Возвращает словарь констант zlib. Сжимает Сжимает Распаковывает Распаковывает Параметр Уровень сжатия (по умолчанию: Указывает, сколько памяти должно быть выделено для состояния сжатия (по умолчанию: Настраивает алгоритм сжатия (по умолчанию: Устанавливает размер окна (по умолчанию: Buffer, содержащий предопределенный словарь сжатия. Логическое значение, если Размер блока для сжатия (по умолчанию: Пример:Объекты Angie#
HTTP-запрос#
r.args{}r.done()r.error()r.finish()r.headersIn{}r.headersOut{}r.httpVersionr.internalr.internalRedirect()r.log()r.methodr.parentr.remoteAddressr.requestBodyr.requestBufferr.requestTextr.rawHeadersIn[]r.rawHeadersOut[]r.responseBodyr.responseBufferr.responseTextr.return()r.send()r.sendBuffer()r.sendHeader()r.setReturnValue()r.statusr.subrequest()r.urir.rawVariables{}r.variables{}r.warn()r.args{}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, можно использовать переменные Angie:r.variables.arg_foo
r.args обратно в строку можно использовать метод stringify модуля Query String.r.done()js_body_filter (0.5.2). Может вызываться только из функции js_body_filter.r.error(string)string в журнал ошибок на уровне логирования error.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_filterr.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 игнорируются. Дублирующиеся значения полей во всех остальных заголовках ответа разделяются запятыми.r.httpVersionr.internaltrue для внутренних 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. Фактическое перенаправление происходит после завершения выполнения обработчика.js_var для HTTP или Stream.r.log(string)string в журнал ошибок на уровне логирования info.r.methodr.parentr.remoteAddressr.requestBodyr.requestBuffer или r.requestText.r.requestBufferclient_max_body_size, а размер буфера должен быть установлен с помощью client_body_buffer_size. Свойство доступно только в директиве js_content.r.requestTextr.requestBuffer, но возвращает string. Обратите внимание, что байты, недопустимые в кодировке UTF-8, могут быть преобразованы в символ замены.r.rawHeadersIn[]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[]r.responseBodyr.responseBuffer или r.responseText.r.responseBufferr.responseBuffer ограничен директивой subrequest_output_buffer_size.r.responseTextr.responseBuffer, но возвращает строку (начиная с версии 0.5.0). Обратите внимание, что байты, недопустимые в кодировке UTF-8, могут быть преобразованы в символ замены.r.return(status[, string | Buffer])status клиенту. Ответ может быть строкой или буфером Buffer (0.5.0).r.send(string | Buffer)r.sendBuffer(data[, options])options — это объект, используемый для переопределения флагов буфера Angie, полученных из буфера входящего фрагмента данных. Флаги могут быть переопределены следующими флагами:lasttrue, если буфер является последним буфером.flushtrue, если буфер должен иметь флаг flush.js_body_filter.r.sendHeader()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.statusr.subrequest(uri[, options[, callback]])uri и options и устанавливает необязательный обратный вызов завершения callback.proxy_set_header. Для отправки совершенно нового набора заголовков прокси-серверу можно использовать директиву proxy_pass_request_headers.options является строкой, она содержит строку аргументов подзапроса. В противном случае ожидается, что options будет объектом со следующими ключами:argsbodymethodGET.detachedtrue, созданный подзапрос является отдельным подзапросом. Ответы на отдельные подзапросы игнорируются. В отличие от обычных подзапросов, отдельный подзапрос может быть создан внутри обработчика переменной. Флаг detached и аргумент callback взаимоисключающи.callback получает объект ответа подзапроса с методами и свойствами, идентичными родительскому объекту запроса.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.urir.rawVariables{}r.variables{}$foo можно использовать один из следующих синтаксисов:r.variables['foo']
r.variables.foo
r.variables['1']
r.variables[1]
angie.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)$http_).r.warn(string)string в журнал ошибок на уровне логирования warning.Stream-сессия#
s.allow()s.decline()s.deny()s.done()s.error()s.log()s.off()s.on()s.remoteAddresss.rawVariables{}s.send()s.sendDownstream()s.sendUpstream()s.statuss.setReturnValue()s.variables{}s.warn()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.s.log(string)string в журнал ошибок на уровне логирования info.s.off(eventName)s.on() (0.2.4).s.on(event, callback)callback для указанного event (0.2.4).event может быть одной из следующих строк:uploaddownloadupstreamdownstreamcallback(data, flags), где data — строка или буфер Buffer (в зависимости от типа события); flags — объект со следующими свойствами:lasttrue, если data является последним буфером.s.remoteAddresss.rawVariabless.send(data[, options])options — это объект, используемый для переопределения флагов буфера Angie, полученных из буфера входящего фрагмента данных. Флаги могут быть переопределены следующими флагами:lasttrue, если буфер является последним буфером.flushtrue, если буфер должен иметь флаг 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{}s.warn(string)string в журнал ошибок на уровне логирования warning.Периодическая сессия#
PeriodicSession.rawVariables{}PeriodicSession.variables{}Periodic Session предоставляется в качестве первого аргумента обработчика js_periodic для HTTP и Stream (начиная с версии 0.8.1).PeriodicSession.rawVariables{}PeriodicSession.variables{}Заголовки#
Headers()Headers.append()Headers.delete()Headers.get()Headers.getAll()Headers.forEach()Headers.has()Headers.set()Headers из API Fetch доступен начиная с версии 0.5.1.Headers можно создать с помощью конструктора Headers() (начиная с версии 0.7.10):Headers([init])initHeaders, может быть строкой, массивом пар имя-значение или существующим объектом 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.bodyUsedRequest.cacheRequest.credentialsRequest.headersRequest.json()Request.methodRequest.modeRequest.text()Request.urlRequest из API Fetch доступен начиная с версии 0.7.10.Request можно создать с помощью конструктора Request():Request[resource[, options]])Request для получения данных, который может быть позже передан в ngx.fetch(). Аргумент resource может быть URL-адресом или существующим объектом Request. Аргумент options является опциональным и ожидается быть объектом со следующими ключами:bodyheadersHeaders, может быть строкой, массивом пар имя-значение или существующим объектом Headers.methodRequest можно создать со следующими свойствами и методами:arrayBuffer()Promise, который разрешается в ArrayBuffer.bodyUsedtrue, если тело было использовано в запросе.cachecredentialssame-origin.headersHeaders, доступный только для чтения, связанный с Request.json()Promise, который разрешается в результат анализа тела запроса как JSON.methodmodetext()Promise, который разрешается в строковое представление тела запроса.urlОтвет#
Response()Response.arrayBuffer()Response.bodyUsedResponse.headersResponse.json()Response.okResponse.redirectedResponse.statusResponse.statusTextResponse.text()Response.typeResponse.urlResponse доступен начиная с версии 0.5.1.Response можно создать с помощью конструктора Response() (начиная с версии 0.7.10):Response[body[, options]])Response. Аргумент body является опциональным, может быть строкой или буфером, по умолчанию null. Аргумент options является опциональным и ожидается быть объектом со следующими ключами:headersHeaders, может быть строкой, массивом пар имя-значение или существующим объектом Headers.statusstatusTextResponse() можно создать со следующими свойствами и методами:arrayBuffer()Response и читает его до конца. Возвращает Promise, который разрешается в ArrayBuffer.bodyUsedtrue, если тело было прочитано.headersHeaders, доступный только для чтения, связанный с Response.json()Response и читает его до конца. Возвращает Promise, который разрешается в результат анализа текста тела как JSON.oktrue, если ответ был успешным (коды состояния между 200–299).redirectedtrue, если ответ является результатом перенаправления.statusstatusTexttext()Response и читает его до конца. Возвращает Promise, который разрешается в строку.typeurlngx#
ngx.buildngx.conf_file_pathngx.conf_prefixngx.error_log_pathngx.fetch()ngx.log()ngx.prefixngx.versionngx.version_numberngx.worker_idngx доступен начиная с версии 0.5.0.ngx.build--build=name скрипта configure, по умолчанию "" (0.8.0).ngx.conf_file_pathngx.conf_prefixngx.error_log_pathngx.fetch(resource, [options])resource (0.5.1), который может быть URL-адресом или объектом Request (0.7.10). Возвращает Promise, который разрешается в объект Response. Начиная с версии 0.7.0 поддерживается схема https://; перенаправления не обрабатываются.resource указан как доменное имя, он определяется с помощью распознавателя. Если указана схема https://, директива js_fetch_trusted_certificate должна быть настроена для аутентификации HTTPS-сервера resource.options ожидается быть объектом со следующими ключами:bodybuffer_size4096.headersmax_response_body_size32768.methodGET.verifytrue (0.7.0).let reply = await ngx.fetch('http://example.com/');
let body = await reply.text();
r.return(200, body);
ngx.log(level, message)level задает один из уровней логирования; параметр message может быть строкой или буфером. Можно задать следующие уровни логирования: ngx.INFO, ngx.WARN и ngx.ERR.ngx.prefixngx.version1.25.0 (0.8.0).ngx.version_number1025000 (0.8.0).ngx.worker_id0 и значением, указанным в директиве worker_processes (0.8.0).Встроенные объекты#
console#
console.error()console.info()console.log()console.time()console.timeEnd()console.warn()console доступен в Angie начиная с версии 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.getRandomValues()crypto.subtle.encrypt()crypto.subtle.decrypt()crypto.subtle.deriveBits()crypto.subtle.deriveKey()crypto.subtle.digest()crypto.subtle.exportKey()crypto.subtle.generateKey()crypto.subtle.importKey()crypto.subtle.sign()crypto.subtle.verify()crypto — это глобальный объект, который позволяет использовать криптографические функции (начиная с версии 0.7.0).crypto.getRandomValues(typedArray)typedArray, но с его содержимым, замененным на новые сгенерированные случайные числа. Возможные значения:typedArrayInt8Array, Int16Array, Uint16Array, Int32Array или Uint32Array.crypto.subtle.encrypt(algorithm, key, data)data с использованием предоставленного algorithm и key. Возвращает Promise, который выполняется ArrayBuffer, содержащим зашифрованный текст. Возможные значения:algorithmRSA-OAEP передайте объект со следующими ключами:nameRSA-OAEP:crypto.subtle.encrypt({name: "RSA-OAEP"}, key, data)
AES-CTR передайте объект со следующими ключами:nameAES-CTR.counterArrayBuffer, TypedArray или DataView — начальное значение блока счетчика, должно быть длиной 16 байт (размер блока AES). Крайние биты длины этого блока используются для счетчика, остальные используются для nonce. Например, если length установлена на 64, то первая половина counter — это nonce, а вторая половина используется для счетчика.lengthAES-CBC передайте объект со следующими ключами:nameAES-CBC.ivArrayBuffer, TypedArray или DataView, должно быть 16 байт, непредсказуемо и предпочтительно криптографически случайно. Однако это не должно быть секретом, например, оно может быть передано в открытом виде вместе с зашифрованным текстом.AES-GCM передайте объект со следующими ключами:nameAES-GCM.ivArrayBuffer, TypedArray или DataView, должно быть 16 байт и должно быть уникальным для каждой операции шифрования, выполняемой с заданным ключом.additionalDataArrayBuffer, TypedArray или DataView, которое содержит дополнительные данные, которые не будут зашифрованы, но будут аутентифицированы вместе с зашифрованными данными. Если additionalData указан, то же данные должны быть указаны в соответствующем вызове decrypt(): если данные, переданные в вызов decrypt(), не совпадают с исходными данными, расшифровка выбросит исключение. Длина бита additionalData должна быть меньше 2^64 - 1.tagLength128) — number, который определяет размер в битах тега аутентификации, сгенерированного в операции шифрования и используемого для аутентификации в соответствующем расшифровании. Возможные значения: 32, 64, 96, 104, 112, 120 или 128. Спецификация AES-GCM рекомендует, чтобы он был 96, 104, 112, 120 или 128, хотя 32 или 64 бита могут быть приемлемыми в некоторых приложениях.keyCryptoKey, которая содержит ключ, который должен быть использован для шифрования.dataArrayBuffer, TypedArray или DataView, которая содержит данные для шифрования (также известные как открытый текст).crypto.subtle.decrypt(algorithm, key, data)Promise с расшифрованными данными. Возможные значения:algorithmencrypt().RSA-OAEP передайте объект со следующими ключами:nameRSA-OAEP:crypto.subtle.encrypt({name: "RSA-OAEP"}, key, data)
AES-CTR передайте объект со следующими ключами:nameAES-CTR.counterArrayBuffer, TypedArray или DataView — начальное значение блока счетчика, должно быть длиной 16 байт (размер блока AES). Крайние биты длины этого блока используются для счетчика, остальные используются для nonce. Например, если length установлена на 64, то первая половина counter — это nonce, а вторая половина используется для счетчика.lengthAES-CBC передайте объект со следующими ключами:nameAES-CBC.ivArrayBuffer, TypedArray или DataView, должно быть 16 байт, непредсказуемо и предпочтительно криптографически случайно. Однако это не должно быть секретом (например, оно может быть передано в открытом виде вместе с зашифрованным текстом).AES-GCM передайте объект со следующими ключами:nameAES-GCM.ivArrayBuffer, TypedArray или DataView, должно быть 16 байт и должно быть уникальным для каждой операции шифрования, выполняемой с заданным ключом.additionalDataArrayBuffer, TypedArray или DataView, которое содержит дополнительные данные, которые не будут зашифрованы, но будут аутентифицированы вместе с зашифрованными данными. Если additionalData указан, то же данные должны быть указаны в соответствующем вызове decrypt(): если данные, переданные в вызов decrypt(), не совпадают с исходными данными, расшифровка выбросит исключение. Длина бита additionalData должна быть меньше 2^64 - 1.tagLength128) — number, который определяет размер в битах тега аутентификации, сгенерированного в операции шифрования и используемого для аутентификации в соответствующем расшифровании. Возможные значения: 32, 64, 96, 104, 112, 120 или 128. Спецификация AES-GCM рекомендует, чтобы он был 96, 104, 112, 120 или 128, хотя 32 или 64 бита могут быть приемлемыми в некоторых приложениях.keyCryptoKey, которая содержит ключ, который должен быть использован для расшифровки. Если используется RSA-OAEP, это свойство privateKey объекта CryptoKeyPair.dataArrayBuffer, TypedArray или DataView, которая содержит данные для расшифровки (также известные как зашифрованный текст).crypto.subtle.deriveBits(algorithm, baseKey, length)Promise, который будет выполнен ArrayBuffer, содержащим производные биты. Возможные значения:algorithmHKDF передайте объект со следующими ключами:nameHKDF.hashSHA-1, SHA-256, SHA-384 или SHA-512.saltArrayBuffer, TypedArray или DataView, который представляет случайное или псевдослучайное значение с той же длиной, что и результат функции digest. В отличие от входного материала ключа, передаваемого в deriveKey(), соль не должна держаться в секрете.infoArrayBuffer, TypedArray или DataView, который представляет информацию о контексте, зависящую от приложения, используемую для привязки производного ключа к приложению или контексту и позволяющую производить различные ключи для разных контекстов при использовании одного и того же входного материала ключа. Это свойство требуется, но может быть пустым буфером.PBKDF2 передайте объект со следующими ключами:namePBKDF2.hashSHA-1, SHA-256, SHA-384 или SHA-512.saltArrayBuffer, TypedArray или DataView, который представляет случайное или псевдослучайное значение не менее 16 байт. В отличие от входного материала ключа, передаваемого в deriveKey(), соль не должна держаться в секрете.iterationsnumber, который представляет количество раз, которое функция хеша будет выполнена в deriveKey().ECDH передайте объект со следующими ключами (начиная с версии 0.9.1):nameECDH.publicCryptoKey, который представляет открытый ключ другой стороны. Ключ должен быть сгенерирован с использованием той же кривой, что и базовый ключ.baseKeyCryptoKey, который представляет входные данные для алгоритма производства — исходный материал ключа для функции производства: например, для PBKDF2 это может быть пароль, импортированный как CryptoKey с использованием crypto.subtle.importKey().length8.crypto.subtle.deriveKey(algorithm, baseKey, derivedKeyAlgorithm, extractable, keyUsages)algorithmHKDF передайте объект со следующими ключами:nameHKDF.hashSHA-1, SHA-256, SHA-384 или SHA-512.saltArrayBuffer, TypedArray или DataView, который представляет случайное или псевдослучайное значение с той же длиной, что и результат функции digest. В отличие от входного материала ключа, передаваемого в deriveKey(), соль не должна держаться в секрете.infoArrayBuffer, TypedArray или DataView, который представляет информацию о контексте, зависящую от приложения, используемую для привязки производного ключа к приложению или контексту и позволяющую производить различные ключи для разных контекстов при использовании одного и того же входного материала ключа. Это свойство требуется, но может быть пустым буфером.PBKDF2 передайте объект со следующими ключами:namePBKDF2.hashSHA-1, SHA-256, SHA-384 или SHA-512.saltArrayBuffer, TypedArray или DataView, который представляет случайное или псевдослучайное значение не менее 16 байт. В отличие от входного материала ключа, передаваемого в deriveKey(), соль не должна держаться в секрете.iterationsnumber, который представляет количество раз, которое функция хеша будет выполнена в deriveKey().ECDH передайте объект со следующими ключами (начиная с версии 0.9.1):nameECDH.publicKeyCryptoKey, который представляет открытый ключ другой стороны. Ключ должен быть сгенерирован с использованием той же кривой, что и базовый ключ.baseKeyCryptoKey, который представляет входные данные для алгоритма производства — исходный материал ключа для функции производства: например, для PBKDF2 это может быть пароль, импортированный как CryptoKey с использованием crypto.subtle.importKey().derivedKeyAlgorithmHMAC передайте объект со следующими ключами:nameHMAC.hashSHA-1, SHA-256, SHA-384 или SHA-512.lengthnumber, который представляет длину в битах ключа. Если не указано, длина ключа равна размеру блока выбранной функции хеша.AES-CTR, AES-CBC или AES-GCM передайте объект со следующими ключами:nameAES-CTR, AES-CBC или AES-GCM, в зависимости от используемого алгоритма.lengthnumber, который представляет длину в битах ключа для генерации: 128, 192 или 256.extractablekeyUsagesArray, который указывает, что можно делать с производным ключом. Использование ключей должно быть разрешено алгоритмом, установленным в derivedKeyAlgorithm. Возможные значения:encryptdecryptsignverifyderiveKeyderiveBitswrapKeyunwrapKeycrypto.subtle.digest(algorithm, data)Promise, который будет выполнен дайджестом. Возможные значения:algorithmSHA-1 (не для криптографических приложений), SHA-256, SHA-384 или SHA-512.dataArrayBuffer, TypedArray или DataView, которая содержит данные для дайджеста.crypto.subtle.exportKey(format, key)CryptoKey и возвращает ключ во внешнем, переносимом формате (начиная с версии 0.7.10). Если format был jwk, то Promise выполняется объектом JSON, содержащим ключ. В противном случае обещание выполняется ArrayBuffer, содержащим ключ. Возможные значения:formatrawpkcs8spkijwkkeyCryptoKey, которая содержит ключ, который должен быть экспортирован.crypto.subtle.generateKey(algorithm, extractable, usage)Promise, который выполняется сгенерированным ключом как объект CryptoKey или CryptoKeyPair. Возможные значения:algorithmRSASSA-PKCS1-v1_5, RSA-PSS или RSA-OAEP передайте объект со следующими ключами:nameRSASSA-PKCS1-v1_5, RSA-PSS или RSA-OAEP, в зависимости от используемого алгоритма.hashdigest для использования, может быть SHA-256, SHA-384 или SHA-512.ECDSA передайте объект со следующими ключами:nameECDSA.namedCurveP-256, P-384 или P-521.HMAC передайте объект со следующими ключами:nameHMAC.hashdigest для использования, может быть SHA-256, SHA-384 или SHA-512.lengthAES-CTR, AES-CBC или AES-GCM передайте строку, определяющую алгоритм, или объект вида "name": "ALGORITHM" , где ALGORITHM — это имя алгоритма.ECDH передайте объект со следующими ключами (начиная с версии 0.9.1):nameECDH.namedCurveP-256, P-384 или P-521.extractableusagearray, который указывает возможные действия с ключом:encryptdecryptsignverifyderiveKeyderiveBitswrapKeyunwrapKeycrypto.subtle.importKey(format, keyData, algorithm, extractable, keyUsages)CryptoKey. Возвращает Promise, который выполняется импортированным ключом как объект CryptoKey. Возможные значения:formatrawpkcs8spkijwkkeyDataArrayBuffer, TypedArray или DataView, который содержит ключ в указанном формате.algorithmRSASSA-PKCS1-v1_5, RSA-PSS или RSA-OAEP передайте объект со следующими ключами:nameRSASSA-PKCS1-v1_5, RSA-PSS или RSA-OAEP, в зависимости от используемого алгоритма.hashdigest для использования, может быть SHA-1, SHA-256, SHA-384 или SHA-512.ECDSA передайте объект со следующими ключами:nameECDSA.namedCurveP-256, P-384 или P-521.HMAC передайте объект со следующими ключами:nameHMAC.hashdigest для использования, может быть SHA-256, SHA-384 или SHA-512.lengthAES-CTR, AES-CBC или AES-GCM передайте строку, определяющую алгоритм, или объект вида "name": "ALGORITHM" , где ALGORITHM — это имя алгоритма.PBKDF2 передайте строку PBKDF2.HKDF передайте строку HKDF.ECDH передайте объект со следующими ключами (начиная с версии 0.9.1):nameECDH.namedCurveP-256, P-384 или P-521.extractablekeyUsagesarray, который указывает возможные действия с ключом:encryptdecryptsignverifyderiveKeyderiveBitswrapKeyunwrapKeycrypto.subtle.sign(algorithm, key, data)signature как Promise, который выполняется ArrayBuffer, содержащим подпись. Возможные значения:algorithmRSASSA-PKCS1-v1_5 передайте строку, определяющую алгоритм, или объект вида "name": "ALGORITHM" .RSA-PSS передайте объект со следующими ключами:nameRSA-PSS.saltLengthinteger, которое представляет длину случайной соли для использования, в байтах.ECDSA передайте объект со следующими ключами:nameECDSA.hashSHA-256, SHA-384 или SHA-512.HMAC передайте строку, определяющую алгоритм, или объект вида "name": "ALGORITHM" .keyCryptoKey, который содержит ключ для использования при подписании. Если алгоритм определяет криптосистему с открытым ключом, это закрытый ключ.dataArrayBuffer, TypedArray или DataView, который содержит данные для подписания.crypto.subtle.verify(algorithm, key, signature, data)Promise, который выполняется логическим значением: true, если подпись действительна, в противном случае false. Возможные значения:algorithmRSASSA-PKCS1-v1_5 передайте строку, определяющую алгоритм, или объект вида "name": "ALGORITHM" .RSA-PSS передайте объект со следующими ключами:nameRSA-PSS.saltLengthinteger, которое представляет длину случайной соли для использования, в байтах.ECDSA передайте объект со следующими ключами:nameECDSA.hashSHA-256, SHA-384 или SHA-512.HMAC передайте строку, определяющую алгоритм, или объект вида "name": "ALGORITHM" .keyCryptoKey, который содержит ключ для использования при проверке. Это секретный ключ для симметричного алгоритма и открытый ключ для системы с открытым ключом.signatureArrayBuffer, TypedArray или DataView, которая содержит подпись для проверки.dataArrayBuffer, TypedArray или DataView, который содержит данные, подпись которых должна быть проверена.CryptoKey#
CryptoKey.algorithmCryptoKey.extractableCryptoKey.typeCryptoKey.usagesCryptoKey представляет криптографический key, полученный из одного из методов SubtleCrypto: crypto.subtle.generateKey(), crypto.subtle.deriveKey(), crypto.subtle.importKey().CryptoKey.algorithmCryptoKey.extractabletrue, если ключ может быть экспортирован (начиная с версии 0.8.0), только для чтения.CryptoKey.typesecretprivateCryptoKeyPair асимметричного алгоритма.publicCryptoKeyPair асимметричного алгоритма.CryptoKey.usagesencryptdecryptsignverifyderiveKeyderiveBitsCryptoKeyPair#
CryptoKeyPair.privateKeyCryptoKeyPair.publicKeyCryptoKeyPair — это объект словаря WebCrypto API, который представляет асимметричную пару ключей.CryptoKeyPair.privateKeyCryptoKey, который представляет закрытый ключ.CryptoKeyPair.publicKeyCryptoKey, который представляет открытый ключ.njs#
njs.versionnjs.version_numbernjs.dump()njs.memoryStatsnjs.on()njs — это глобальный объект, представляющий текущий экземпляр VM (с версии 0.2.0).njs.versionnjs.version_number0x000704 (с версии 0.7.4).njs.dump(value)njs.memoryStatssizenjs.on(event, callback)exitprocess#
process.argvprocess.envprocess.kill()process.pidprocess.ppidprocess — это глобальный объект, предоставляющий информацию о текущем процессе (0.3.3).process.argvprocess.envenv для сохранения некоторых унаследованных переменных.process.kill(pid, number | string)pid. Имена сигналов — это числа или строки, такие как SIGINT или SIGHUP. Дополнительную информацию см. в kill(2).process.pidprocess.ppidString#
Byte Strings (Removed)#
r.requestBuffer, r.rawVariables.toUTF8() сериализовал Unicode строку в байтовую строку с использованием кодировки UTF-8. Метод toBytes() сериализовал Unicode строку с кодовыми точками до 255 в байтовую строку; в противном случае возвращалось null.String.bytesFrom() (удалено в 0.8.0, используйте Buffer.from())String.prototype.fromBytes() (удалено в 0.8.0)String.prototype.fromUTF8() (удалено в 0.8.0, используйте TextDecoder)String.prototype.toBytes() (удалено в 0.8.0)String.prototype.toString() с кодировкой (удалено в 0.8.0)String.prototype.toUTF8() (удалено в 0.8.0, используйте TextEncoder)Web API#
TextDecoder#
TextDecoder()TextDecoder.prototype.encodingTextDecoder.prototype.fatalTextDecoder.prototype.ignoreBOMTextDecoder.prototype.decode()TextDecoder создает поток кодовых точек из потока байтов (0.4.3).TextDecoder([[encoding], options])TextDecoder для указанной encoding; в настоящее время поддерживается только UTF-8. options — это словарь TextDecoderOptions со свойством:fatalTextDecoder.decode() вызывать исключение TypeError при обнаружении ошибки кодирования, по умолчанию false.TextDecoder.prototype.encodingTextDecoder(), только для чтения.TextDecoder.prototype.fataltrue если режим ошибок является критическим, только для чтения.TextDecoder.prototype.ignoreBOMtrue если маркер порядка байтов игнорируется, только для чтения.TextDecoder.prototype.decode(buffer, [options])buffer посредством TextDecoder(). Буфер может быть ArrayBuffer. options — это словарь TextDecodeOptions со свойством:streamdecode(): true при обработке данных по частям, и false для последнего фрагмента или если данные не разбиты на части. По умолчанию false.>> (new TextDecoder()).decode(new Uint8Array([206,177,206,178]))
αβ
TextEncoder#
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 и возвращает объект словаря, показывающий ход кодирования. Объект словаря содержит двух членов:readstring, преобразованных в UTF-8.writtenUint8Array.Таймеры#
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)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 — это совместимый с Node.js способ работы с двоичными данными. Из-за большого размера файла этот раздел ограничен полным списком методов Buffer.Buffer.alloc()Buffer.allocUnsafe()Buffer.byteLength()Buffer.compare()Buffer.concat()Buffer.from(array)Buffer.from(arrayBuffer)Buffer.from(buffer)Buffer.from(object)Buffer.from(string)Buffer.isBuffer()Buffer.isEncoding()buffer[]buf.bufferbuf.byteOffsetbuf.compare()buf.copy()buf.equals()buf.fill()buf.includes()buf.indexOf()buf.lastIndexOf()buf.lengthbuf.readIntBE()buf.readIntLE()buf.readUIntBE()buf.readUIntLE()buf.readDoubleBE()buf.readDoubleLE()buf.readFloatBE()buf.readFloatLE()buf.subarray()buf.slice()buf.swap16()buf.swap32()buf.swap64()buf.toJSON()buf.toString()buf.write()buf.writeIntBE()buf.writeIntLE()buf.writeUIntBE()buf.writeUIntLE()buf.writeDoubleBE()buf.writeDoubleLE()buf.writeFloatBE()buf.writeFloatLE()Crypto#
import crypto from 'crypto'.crypto.createHash()crypto.createHmac()crypto.createHash(algorithm)algorithm. Алгоритм может быть md5, sha1 и sha256.crypto.createHmac(algorithm, secret key)algorithm и secret key. Алгоритм может быть md5, sha1 и sha256.Hash#
hash.update()hash.digest()hash.update(data)data.hash.digest([encoding])hash.update(). Кодировка может быть hex, base64 и base64url. Если кодировка не предоставлена, возвращается объект Buffer (0.4.4).hash.copy()import crypto from 'crypto';
crypto.createHash('sha1').update('A').update('B').digest('base64url');
/* BtlFlCqiamG-GMPiK_GbvKjdK10 */
HMAC#
hmac.update()hmac.digest()hmac.update(data)data.hmac.digest([encoding])hmac.update(). Кодировка может быть hex, base64 и base64url. Если кодировка не предоставлена, возвращается объект Buffer (0.4.4).fs#
fs предоставляет операции с файловой системой. Объект модуля импортируется с использованием import fs from 'fs'.fs.accessSync()fs.appendFileSync()fs.mkdirSync()fs.readdirSync()fs.readFileSync()fs.realpathSync()fs.renameSync()fs.rmdirSync()fs.symlinkSync()fs.unlinkSync()fs.writeFileSync()fs.promises.readFile()fs.promises.appendFile()fs.promises.writeFile()fs.promises.readdir()fs.promises.mkdir()fs.promises.rmdir()fs.promises.rename()fs.promises.unlink()fs.promises.symlink()fs.promises.access()fs.promises.realpath()Query String#
import qs from 'querystring'.querystring.decode()querystring.encode()querystring.escape()querystring.parse()querystring.stringify()querystring.unescape()querystring.decode()querystring.parse().querystring.encode()querystring.stringify().querystring.escape(string)string оптимизированным для требований строк запроса URL образом. Метод используется querystring.stringify() и не должен использоваться напрямую.querystring.parse(string[, separator[, equal[, options]]])string как строку запроса URL и возвращает объект. Опциональный параметр separator (по умолчанию: &) указывает подстроку для разделения пар ключ-значение. Опциональный параметр equal (по умолчанию: =) указывает подстроку для разделения ключей и значений. Опциональный параметр options — это объект, который может содержать следующее свойство:decodeURIComponentquerystring.unescape().maxKeys1000. Значение 0 удаляет ограничения на подсчет ключей.>> qs.parse('foo=bar&abc=xyz&abc=123')
{
foo: 'bar',
abc: ['xyz', '123']
}
querystring.stringify(object[, separator[, equal[, options]]])object путем итерации по его собственным свойствам. Опциональный параметр separator (по умолчанию: &) указывает подстроку для разделения пар ключ-значение. Опциональный параметр equal (по умолчанию: =) указывает подстроку для разделения ключей и значений. Опциональный параметр options — это объект, который может содержать следующее свойство:encodeURIComponentquerystring.escape().>> qs.stringify({ foo: 'bar', baz: ['qux', 'quux'], corge: '' })
'foo=bar&baz=qux&baz=quux&corge='
querystring.unescape(string)string. Метод используется querystring.parse() и не должен использоваться напрямую.XML#
xml.parse()xml.c14n()xml.exclusiveC14n()xml.serialize()xml.serializeToString()XMLDocXMLNodeXMLAttrimport 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)XMLDoc, представляющий проанализированный XML документ.c14n(root_node[, excluding_node])root_node и его потомков согласно Canonical XML Version 1.1. root_node может быть объектом-оберткой XMLNode или XMLDoc вокруг XML структуры. Возвращает объект Buffer, содержащий канонизированный вывод.excluding_nodeexclusiveC14n(root_node[, excluding_node[, withComments[,prefix_list]]])root_node и его потомков согласно Exclusive XML Canonicalization Version 1.0.root_nodeXMLNode или XMLDoc вокруг XML структуры.excluding_nodewithCommentsfalse. Если true, канонизация соответствует Exclusive XML Canonicalization Version 1.0. Возвращает объект Buffer, содержащий канонизированный вывод.prefix_listserialize()xml.c14n() (с версии 0.7.11).serializeToString()xml.c14n(), за исключением того, что возвращает результат как string (с версии 0.7.11).XMLDocdoc.$rootdoc.abcabc, как объект-обертка XMLNode.XMLNodenode.abcnode.$tag$abc.node.$attr$abcabc, доступно для записи с версии 0.7.11.node.$attr$abc=xyznode.setAttribute('abc', xyz) (с версии 0.7.11).node.$attrsXMLAttr для всех атрибутов узла.node.$namenode.$nsnode.$parentnode.$tag$abcabc, доступен для записи с версии 0.7.11.node.$tagsnode.$tags = [node1, node2, ...]node.removeChildren(); node.addChild(node1); node.addChild(node2) (с версии 0.7.11).node.$tags$abcabc, узла, доступны для записи с версии 0.7.11.node.$textnode.$text = 'abc'node.setText('abc') (с версии 0.7.11).node.addChild(nd)nd рекурсивно копируется перед добавлением к узлу.node.removeAllAttributes()node.removeAttribute(attr_name)attr_name (с версии 0.7.11).node.removeChildren(tag_name)tag_name (с версии 0.7.11). Если tag_name отсутствует, все дочерние теги удаляются.node.removeText()node.setAttribute(attr_name, value)attr_name (с версии 0.7.11). Когда значение null, атрибут, названный attr_name, удаляется.node.setText(value)null, текст узла удаляется.XMLAttrattr.abcabc.zlib#
zlib (0.5.2) предоставляет функциональность сжатия и распаковки с использованием zlib. Объект модуля импортируется с использованием import zlib from 'zlib'.zlib.constantszlib.deflateRawSync()zlib.deflateSync()zlib.inflateRawSync()zlib.inflateSync()zlib.constantszlib.deflateRawSync(data[, options])data с использованием алгоритма Deflate без заголовка zlib.zlib.deflateSync(data[, options])data с использованием алгоритма Deflate.zlib.inflateRawSync(data[, options])data с использованием алгоритма Deflate без заголовка zlib.zlib.inflateSync(data[, options])data с использованием алгоритма Deflate.options — это объект, который может содержать следующие свойства:levelzlib.constants.Z_DEFAULT_COMPRESSION).memLevelzlib.constants.Z_DEFAULT_MEMLEVEL).strategyzlib.constants.Z_DEFAULT_STRATEGY).windowBitszlib.constants.Z_DEFAULT_WINDOWBITS).dictionaryinfotrue, возвращает объект с буфером и движком.chunkSizezlib.constants.Z_DEFAULT_CHUNK).import zlib from 'zlib';
const deflated = zlib.deflateSync('Hello World!');
const inflated = zlib.inflateSync(deflated);
console.log(inflated.toString()); // 'Hello World!'