NodeJS Azure Функция возвращает статус 500 даже после переопределения res.status - PullRequest
2 голосов
/ 21 марта 2020

У меня есть Azure Function App v2 в NodeJS, который возвращает статус 500, даже если я переопределил свойство res.status. Код выглядит следующим образом:

module.exports = async (context, req) => {

...

try {
        const data = await myfunc(body)
        context.res = {
            status: 200,
            body: data,
            headers: {
                'Content-Type': 'application/json'
            }
        }
    } catch (err) {
        context.log.error(err)
        if (err instanceof NotFoundException) {
            context.res = {
                status: 204,
                body: 'No answer found.'
            }
        } else {
            context.res = {
                status: 500,
                body: err.message
            }
        }
    }
}

Однако, когда myfunc выдает исключение, статус возврата всегда равен 500 независимо от типа исключения. Поэтому, когда в этом блоке выбрасывается NotFoundException, я получаю статус 204 при локальном запуске и 500 при работе в производственном режиме.

Я пытался сделать context.log вызовы непосредственно перед установкой состояния на 204 Журнал отображается нормально, но статус по-прежнему равен 500, а тело отсутствует.

Я также пытался установить context.res.isRaw на true, но это не сработало.

Как локальные, так и удаленные проекты используют один и тот же стек (Node 12 / AzureFunction v2, более конкретно, изображение mcr.microsoft.com/azure-functions/node:2.0, на котором работает узел 10.0).

Есть ли что-то другое, что мне не хватает в этом способе? Azure Функции имеют дело с обработкой ошибок? Почему я переопределяю свойство status на 204, но все же в Azure Runtime возвращается 500? И что еще более важно, как я сталкиваюсь с двумя совершенно разными способами выполнения кода в предположительно одной и той же среде выполнения (v2 node10)?

Моя функция. json:

{
  "disabled": false,
  "bindings": [
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "res"
    }
  ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...