# Handlers

Um handler é o código que o Azion Runtime chama quando uma requisição chega a uma function em [Functions](/pt-br/documentacao/plataforma/functions/). No padrão ES Modules, o export default do módulo é um objeto cujo método `fetch` recebe a requisição e retorna um `Response`. Um handler responde a requisições HTTP, aplica lógica de firewall e de controle de acesso e executa trabalho assíncrono enquanto o Azion Runtime processa a requisição.

> **nota**
>
> Com `azion dev`, `env` é o `process.env` da sua máquina: todo o ambiente do shell quando o projeto não tem um arquivo `.env`, ou apenas as chaves do `.env` quando o projeto tem um. `ctx` contém apenas `waitUntil`, e `request.metadata` é `undefined`.

---

## Handler fetch

O handler fetch é o método `fetch` do export default. O Azion Runtime o chama com três argumentos a cada execução da function:

```javascript
async fetch(request, env, ctx)
```

| Parâmetro                | Tipo                                                                     | Descrição                                                                                                                                                                                 |
| ------------------------ | ------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `request`                | [`Request`](/pt-br/documentacao/devtools/runtime/api-reference/request/) | Requisição HTTP recebida. `request.metadata` carrega os [metadados](/pt-br/documentacao/devtools/runtime/api-reference/metadata/) da requisição, como a geolocalização e o protocolo TLS. |
| `env`                    | Object                                                                   | Um objeto vazio em uma function com deploy feito. As variáveis de ambiente são lidas com `Azion.env.get()` ou `process.env`.                                                              |
| `ctx`                    | `Context`                                                                | Contexto de execução da requisição. Carrega `args` e `waitUntil`.                                                                                                                         |
| `ctx.args`               | Object                                                                   | [Args](/pt-br/documentacao/plataforma/functions/como-funciona/#args) da instância de function, um objeto JSON.                                                                            |
| `ctx.waitUntil(promise)` | Function                                                                 | Estende a execução até que `promise` seja resolvida ou rejeitada.                                                                                                                         |

O parâmetro `env` não contém variáveis em uma function com deploy feito. Para ler uma variável, chame `Azion.env.get('<name>')` ou leia `process.env.<name>`: os dois retornam o valor dela. Para mais informações, consulte [API de variáveis de ambiente](/pt-br/documentacao/devtools/runtime/api-reference/environment-variables/).

---

## Formatos de handler

O Azion Runtime executa uma function escrita no padrão ES Modules, no padrão Service Worker ou como uma função de export default. O objeto ES Modules é o formato recomendado:

| Formato                                             | Padrão                  | O que o handler recebe                                                                                                                                                                                        |
| --------------------------------------------------- | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `export default { fetch(request, env, ctx) }`       | ES Modules, recomendado | `request`, `env` e `ctx`, como a tabela do handler fetch os descreve.                                                                                                                                         |
| `addEventListener('fetch', (event) => {})`          | Service Worker          | Um `FetchEvent` com `request`, `args`, `console`, `respondWith()` e `waitUntil()`. Para mais informações, consulte [addEventListener](/pt-br/documentacao/devtools/runtime/api-reference/add-eventlistener/). |
| `export default main`, em que `main` recebe `event` | Obsoleto                | O mesmo `FetchEvent` que o padrão Service Worker recebe.                                                                                                                                                      |

Uma function cujo export default é uma função continua em execução, e `azion build` imprime esta linha de obsolescência para ela:

```text
[Azion] [Build] › ⚠  warning   DEPRECATED: Migrate handler to → export default { fetch: (request, env, ctx) => {...} }
```

Uma instância de function em um firewall usa um handler `firewall` no lugar de `fetch`. Para mais informações, consulte [Functions em um firewall](/pt-br/documentacao/plataforma/functions/como-funciona/#functions-em-um-firewall).

---

## Exemplo

Este handler fetch retorna uma resposta em texto simples para toda requisição:

```javascript
export default {
  async fetch(request, env, ctx) {
    return new Response('Hello World!');
  },
};
```

Com o deploy feito, a function retorna esta resposta:

```json
{
 "status": 200,
 "statusText": "",
 "headers": {
  "content-type": "text/plain;charset=UTF-8"
 },
 "body": "Hello World!"
}
```

---

## Recursos relacionados

- [Como Functions funciona](/pt-br/documentacao/plataforma/functions/como-funciona.md): Como uma regra, uma instância de function e os Args dela chegam ao handler.
- [API de variáveis de ambiente](/pt-br/documentacao/devtools/runtime/api-reference/environment-variables.md): Como um handler lê as variáveis e os secrets da conta.
- [FetchEvent](/pt-br/documentacao/devtools/runtime/api-reference/fetch-event.md): O evento que um handler Service Worker recebe e os métodos dele.
- [Response](/pt-br/documentacao/devtools/runtime/api-reference/response.md): O objeto que um handler retorna para responder à requisição.
