Comments 6
Интересно, а при развертывании функции, поливает ли вас рекламой от яндекс такси/знакомств cli того же yandex-cloud.
Несколько замечаний:
1) Вместо path: event.url
нужно писать path: event.url.replace(/\?.*/, "")
, иначе это нарушает спецификацию (и OpenAPI, и Express). @koa/router вообще не работает без этого, например.
2) Вместо return serverless(app)(patchedEvent, context)
нужно, конечно, закешировать на уровне модуля const _handler = serverless(app)
и затем вызывать return _handler(patchedEvent, context)
3) Вместо get:
в OpenAPI спецификации нужно использовать x-yc-apigateway-any-method:
, чтобы работали POST, PUT и т.д.
Спасибо за полезные уточнения, позволяющие сделать из простого примера в статье решение, более подходящее для продакшена.
is1, подскажите пожалуйста по второму пункту - что дает разделение return на две строки?
Я не могу понять - чем Ваша запись лучше ?
Предложенный мною вариант лучше тем, что первая из двух строк (создание обработчика вызовом serverless(app)
) вызовется ровно один раз за время жизни программы. Я же написал: "закешировать [в константе] на уровне модуля".
В предложенном же автором коде новый обработчик создается при обработке каждого запроса, обрабатывает ровно один запрос и затем уничтожается сборщиком мусора. Это медленнее.
Запускаем приложение на Express.js в Yandex Cloud Functions