# Handlers

import Code from '~/components/Code/Code.astro'
import Tabs from '~/components/tabs/Tabs'

As **Azion Functions** suportam handlers JavaScript. As funções handler permitem que você controle como sua lógica no edge gerencia requisições recebidas, aplica regras de segurança e interage com o ambiente de execução. Você pode definir essas funções handler utilizando o padrão ES Modules.

Com os handlers em JavaScript, você pode:

- Responder a eventos fetch (requisições HTTP).
- Aplicar lógica de firewall e controle de acesso.
- Realizar operações assíncronas durante o processamento da requisição.


<Tabs client:visible>
    <Fragment slot="tab.fetch">Fetch</Fragment>
    <Fragment slot="tab.firewall">Firewall</Fragment>

<Fragment slot="panel.fetch">

<Code lang="javascript" code={`
export default {
  async fetch(request, env, ctx) {
    return new Response('Hello World!');
  },
};
`} />

### Parâmetros:

| Parâmetro | Tipo | Descrição |
|-----------|------|-----------|
| `request` | Request | Objeto da requisição HTTP |
| `env` | Object | Variáveis de ambiente e bindings |
| `ctx` | Object | Contexto de execução |
| `ctx.waitUntil(promise)` | Function | Estende o tempo de vida do worker |

</Fragment>

<Fragment slot="panel.firewall">

<Code lang="javascript" code={`
export default {
  async firewall(request, env, ctx) {
    return new Response('Hello World!');
  },
};
`} />

### Parâmetros:

| Parâmetro | Tipo | Descrição |
|-----------|------|-----------|
| `request` | Request | Objeto da requisição HTTP |
| `env` | Object | Variáveis de ambiente e bindings |
| `ctx` | Object | Contexto de execução |
| `ctx.deny()` | Function | Bloqueia a requisição imediatamente (apenas no padrão ES Modules). Se não for chamada, a requisição continua para o handler fetch |


</Fragment>

</Tabs>