# FetchEvent

`FetchEvent` é o evento que o Azion Runtime passa para um listener registrado com [addEventListener](/pt-br/documentacao/devtools/runtime/api-reference/add-eventlistener/) para o tipo `fetch`. O listener define qual código é executado quando uma requisição chega, e o evento leva os dados da requisição até ele. O listener lê `event.request` para rotear, filtrar ou transformar o tráfego. Em seguida, ele chama `event.respondWith()` com uma resposta que ele mesmo constrói, ou com a resposta de uma chamada [fetch()](/pt-br/documentacao/devtools/runtime/api-reference/fetch/) para uma origem. Para mais informações, consulte [FetchEvent](https://developer.mozilla.org/en-US/docs/Web/API/FetchEvent) na MDN Web Docs.

Um handler escrito como `export default main(event)` recebe o mesmo `FetchEvent`, e o `azion build` marca esse formato como obsoleto. Para o formato de handler recomendado, consulte [Handlers](/pt-br/documentacao/devtools/runtime/api-reference/handlers/).

> **nota**
>
> Com `azion dev`, o evento não tem a propriedade `args` e `event.request.metadata` é `undefined`.

---

## Construtor

O Azion Runtime cria um `FetchEvent` para cada requisição e o passa para o listener:

```javascript
addEventListener(type, listener)
```

Seu código não constrói o evento. Em uma function após o deploy, `new FetchEvent('fetch')` lança `TypeError: Illegal constructor.`

---

## Propriedades

| Propriedade     | Tipo                                                                     | Descrição                                                                                                                                                                                          |
| --------------- | ------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `event.args`    | Object                                                                   | Args da instância da function, uma propriedade por chave. Uma instância sem Args passa `{}`. Para mais informações, consulte [Args](/pt-br/documentacao/plataforma/functions/como-funciona/#args). |
| `event.console` | Object                                                                   | Console do evento, com métodos como `log()`.                                                                                                                                                       |
| `event.request` | [`Request`](/pt-br/documentacao/devtools/runtime/api-reference/request/) | Requisição HTTP que a function recebeu. Em uma function após o deploy, `event.request.metadata` contém os [metadados](/pt-br/documentacao/devtools/runtime/api-reference/metadata/) da requisição. |
| `event.type`    | String                                                                   | Tipo do evento: `fetch`.                                                                                                                                                                           |

---

## Métodos

| Método                        | Descrição                                                                                                                                                                                   |
| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `event.respondWith(response)` | Define a resposta que a function envia ao cliente. `response` é um [`Response`](/pt-br/documentacao/devtools/runtime/api-reference/response/) ou uma promise que resolve em um.             |
| `event.waitUntil()`           | Presente no evento. O handler `fetch(request, env, ctx)` expõe `ctx.waitUntil()`; para mais informações, consulte [Handlers](/pt-br/documentacao/devtools/runtime/api-reference/handlers/). |

---

## Exemplo

Este listener passa o evento para uma função `handleRequest`, e `event.respondWith()` envia a resposta que essa função retorna:

```javascript
async function handleRequest(event) {
  return new Response("Hello world");
}

addEventListener("fetch", (event) => {
  event.respondWith(handleRequest(event));
});
```

---

## Recursos relacionados

- [addEventListener](/pt-br/documentacao/devtools/runtime/api-reference/add-eventlistener.md): O registro do listener que recebe um `FetchEvent`.
- [Request](/pt-br/documentacao/devtools/runtime/api-reference/request.md): As propriedades e os métodos da requisição que `event.request` contém.
- [Handlers](/pt-br/documentacao/devtools/runtime/api-reference/handlers.md): O formato de handler recomendado, `fetch(request, env, ctx)`, e seus argumentos.
- [Web APIs](/pt-br/documentacao/devtools/runtime/api-reference/javascript.md): As outras Web APIs que o Azion Runtime suporta.
