Yandex.Cloud
  • Сервисы
  • Почему Yandex.Cloud
  • Сообщество
  • Решения
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Yandex Cloud Functions
  • Начало работы
    • Обзор
    • Создание функции
      • Обзор
      • Python
      • Node.js
      • PHP
      • Go
      • Bash
    • Создание триггера
      • Обзор
      • Таймер
      • Триггер для Message Queue
      • Триггер для Object Storage
      • Триггер для Container Registry
      • Триггер для Cloud Logs
      • Триггер для Yandex IoT Core
  • Пошаговые инструкции
    • Все инструкции
    • Получение IAM-токена сервисного аккаунта с помощью функции
    • Управление правами доступа к функции
    • Управление функцией
      • Создание функции
      • Управление версиями функции
      • Работа в редакторе кода
      • Вызов функции
      • Изменение функции
      • Просмотр графиков мониторинга
      • Просмотр журнала выполнения
      • Удаление функции
    • Управление триггером
      • Получение информации о триггере
      • Создание таймера
      • Создание триггера для Message Queue
      • Создание триггера для Object Storage
      • Создание триггера для Container Registry
      • Создание триггера для Cloud Logs
      • Создание триггера для Yandex IoT Core
      • Изменение триггера
      • Удаление триггера
  • Концепции
    • Обзор
    • Функция
    • Вызов функции
    • Среда выполнения
      • Обзор
      • Окружение
      • Контекст выполнения
    • Сборщик
    • Триггер
      • Обзор
      • Таймер
      • Триггер для Message Queue
      • Триггер для Object Storage
      • Триггер для Container Registry
      • Триггер для Cloud Logs
      • Триггер для Yandex IoT Core
    • Dead Letter Queue
    • Лог-группы
    • Мониторинг
    • Резервное копирование
    • Квоты и лимиты
  • Разработка на Node.js
    • Обзор
    • Управление зависимостями
    • Обработчик запросов
    • Контекст вызова
    • Журналирование
    • Обработка ошибок
    • Использование SDK
  • Разработка на Python
    • Обзор
    • Управление зависимостями
    • Обработчик запросов
    • Контекст вызова
    • Журналирование
    • Обработка ошибок
    • Использование SDK
  • Разработка на Go
    • Обзор
    • Управление зависимостями
    • Обработчик запросов
    • Контекст вызова
    • Журналирование
    • Обработка ошибок
    • Использование SDK
  • Разработка на PHP
    • Обзор
    • Управление зависимостями
    • Обработчик запросов
    • Контекст вызова
    • Журналирование
    • Обработка ошибок
  • Разработка на Bash
    • Обзор
    • Обработчик запросов
    • Журналирование
    • Обработка ошибок
    • Использование SDK
  • Разработка на Java
    • Обзор
    • Модель программирования
      • Обзор
      • Интерфейс Function
      • Интерфейс YcFunction
      • Класс HttpServlet
      • Spring Boot
    • Управление зависимостями
    • Обработчик запросов
    • Контекст вызова
    • Журналирование
    • Обработка ошибок
    • Использование SDK
  • Разработка на R
    • Обзор
    • Модель программирования
    • Управление зависимостями
    • Обработчик запросов
    • Контекст вызова
    • Журналирование
    • Обработка ошибок
  • Разработка на C#
    • Обзор
    • Модель программирования
      • Обзор
      • Интерфейс Function
      • Интерфейс YcFunction
    • Управление зависимостями
    • Обработчик запросов
    • Контекст вызова
    • Журналирование
    • Обработка ошибок
    • Использование SDK
  • Сценарии использования
    • Создание навыка Алисы
  • Правила тарификации
  • Управление доступом
  • Справочник API Functions
    • Аутентификация в API
    • gRPC
      • Обзор
      • FunctionService
      • OperationService
    • REST
      • Обзор
      • Function
        • Обзор
        • create
        • createVersion
        • delete
        • get
        • getVersion
        • getVersionByTag
        • list
        • listAccessBindings
        • listOperations
        • listRuntimes
        • listTagHistory
        • listVersions
        • removeTag
        • setAccessBindings
        • setTag
        • update
        • updateAccessBindings
  • Справочник API Triggers
    • Аутентификация в API
    • gRPC
      • Обзор
      • TriggerService
      • OperationService
    • REST
      • Обзор
      • Trigger
        • Обзор
        • create
        • delete
        • get
        • list
        • listOperations
        • update
  • Вопросы и ответы
  1. Разработка на Node.js
  2. Обработчик запросов

Обработчик запросов

  • Виды обработчика
  • Асинхронный обработчик
  • Синхронный обработчик
  • Примеры
    • Вывод структуры HTTP-запроса
    • Асинхронный обработчик
    • Синхронный обработчик

Обработчик запросов — это метод, который используется для обработки каждого вызова функции. При создании версии функции необходимо указать точку входа, которая состоит из имени файла и имени обработчика запросов (например, index.myFunction). Чтобы обработчик был доступен вне модуля (файла), экспортируйте его, добавив ключ в объект module.exports.

Примечание

В каждый момент времени один экземпляр функции обрабатывает только один запрос. Это позволяет использовать глобальные переменные без необходимости обеспечивать контроль целостности данных.

При вызове обработчика среда выполнения передает следующие аргументы:

  1. Тело запроса (параметр body).

    Если тело запроса — JSON-документ, то оно будет преобразовано в Object c помощью метода JSON.parse.

  2. Контекст вызова (параметр context).

    Контекст содержит необходимую информацию о версии функции. Структура этого объекта описана в разделе Контекст вызова.

Виды обработчика

Функция может обрабатывать один или несколько запросов одновременно, для этого используются синхронный и асинхронный обработчики соответственно.

Асинхронный обработчик

Обработчик может быть асинхронной функцией async function(). В этом случае вы можете использовать следующие операторы:

  • return — возвращает ответ функции.
  • throw — сообщает среде выполнения об ошибке.
  • await — отслеживает выполнение вызова асинхронных функций.

Примечание

Асинхронная функция должна возвращать непосредственный результат. Дополнительно использовать объект Promise для отслеживания результата вызова не требуется, так как функция уже является асинхронной.

Подробнее о разработке с помощью async/await читайте в Современном учебнике JavaScript.

Синхронный обработчик

Если не требуется вызов асинхронных функций или есть необходимость использовать традиционную модель обратных вызовов, используйте синхронный обработчик.

Чтобы вернуть результат выполнения, используйте оператор return или сигнализируйте об исключении с помощью оператора throw. Синхронная функция обязана возвращать результат, отличный от undefined, иначе код будет выполнен с ошибкой Non-async entry point should provide a result. Return a value or use async function instead.

При этом, если обработчик вернет экземпляр объекта Promise, то среда выполнения автоматически дождется результата обработки этого объекта. При работе с объектом Promise корректная обработка ошибок и исключений зависит от кода вашей функции. Убедитесь, что:

  • Один из обратных вызовов функции (resolve или reject), который выполняется внутри объекта Promise, обязательно будет выполнен.
  • Все исключения в теле функции корректно обработаны.
    В противном случае выполнение кода будет нарушено (функция перестанет реагировать на вызовы, или весь процесс будет завершен с ошибкой).

Подробнее о разработке с помощью Promise читайте в Современном учебнике JavaScript.

Примеры

Вывод структуры HTTP-запроса

Следующая функция выводит структуру запроса и контекста вызова одновременно и в журнал выполнения, и в ответ функции:

module.exports.handler = function (event, context) {
    console.log("event", event);
    console.log("context", context);
    
    return {
        statusCode: 200,
        body: JSON.stringify({
            event: event,
            context: context
        })
    };
};

Асинхронный обработчик

Функция делает запрос к https://cloud.yandex.ru/ и возвращает HTTP-код ответа и содержимое JSON-документа:

const fetch = require("node-fetch");

module.exports.handler = async function (event) {
    
    const response = await fetch('https://cloud.yandex.ru/');
    const body     = await response.text();
    
    return {
        code: response.status,
        body: body
    };
    
};

Синхронный обработчик

Функция возвращает подготовленный ответ или ошибку:

module.exports.handler = function () {
    if (Math.random() >= 0.5) {
        throw new Error("not so lucky");
    }

    return {
        "message": "Lucky one!"
    };
};
В этой статье:
  • Виды обработчика
  • Асинхронный обработчик
  • Синхронный обработчик
  • Примеры
  • Вывод структуры HTTP-запроса
  • Асинхронный обработчик
  • Синхронный обработчик
Language
Вакансии
Политика конфиденциальности
Условия использования
© 2021 ООО «Яндекс.Облако»