Web-Frameworks

ExpressJS

Exemplos
  • GET básico:

    import express from 'npm:express';
    
    const app = express();
    
    app.get('/', (req: express.Request, res: express.Response) => {
        res.send('Hello World!');
    });
    
    app.listen(3000, () => {
        console.log('Server is running on http://localhost:3000');
    });
    
  • GET com body:

    import express from 'npm:express';
    
    const app = express();
    
    app.use(express.json());
    
    app.get('/oi', (req: express.Request, res: express.Response) => {
        console.log(request.body);
        
        res.send('Hello World!');
    });
    
    app.listen(3000, () => {
        console.log('Server is running on http://localhost:3000');
    });
    
  • GET com "Router":

    • Supostamente é tipo pastas da URL.

    • A URL completa é no formato https://discord.com/api/v9/channels

    import express from 'npm:express';
    
    const app = express();
    
    app.use(express.json());
    
    const api = express.Router();
    api.get('/channels', (request: express.Request, response: express.Response) => {
    });
    api.get('/users', (request: express.Request, response: express.Response) => {
    });
    api.use('/api/v9', api);
    
    
    app.listen(3000, () => {
        console.log('Server is running on http://localhost:3000');
    });
    
  • GET com ID:

    import express from 'npm:express';
    
    const app = express();
    
    app.use(express.json());
    
    app.get('/produtos/:id', (request: express.Request, response: express.Response) => {
        const {id} = request.params;
        
        res.send(`ID pedido: ${id}`);
    });
    
    app.listen(3000, () => {
        console.log('Server is running on http://localhost:3000');
    });
    
Status
  • **Regras:

    • No Express, você só pode enviar uma única resposta para cada requisição, seja ela JSON, texto ou qualquer outro formato.

    • No Express, para evitar o timeout, você deve sempre enviar uma resposta completa  usando um dos métodos como res.send , res.json , ou res.end .

      • Enviar apenas res.status(200);  não é suficiente no Express. Esse comando define o código de status HTTP  para a resposta, mas não a encerra nem envia conteúdo. O cliente continuará aguardando até o timeout porque nenhuma resposta final foi enviada.

  • **Boas práticas:

    • Nunca chame res.send , res.json  ou res.end  mais de uma vez na mesma requisição.

    • Use console.log  ou uma biblioteca como Winston  para registrar logs do servidor.

  • Uso do status:

    res.status(200).json(personagem);  // Explicitamente define que o Status é 200.
    res.json(personagem);              // Implicitamente define o Status padrão, que é 200.
    
  • .send:

    • Envia uma resposta ao cliente, que pode incluir um corpo de mensagem ( body ).

    • Ele formata automaticamente o conteúdo, como strings, objetos JSON, buffers ou números.

    • Finaliza a resposta após o envio.

    • Se usado sem parâmetros ( res.send() ), ele enviará um corpo vazio ( ' '  ou equivalente a null ) e definirá automaticamente o cabeçalho Content-Length  como 0 .

    • Pode inferir o tipo de conteúdo e ajustar o cabeçalho Content-Type  automaticamente.

    res.send(); // Envia uma resposta com corpo vazio e encerra
    res.send('Hello World'); // Envia uma string
    res.send({ message: 'Hello World' }); // Envia um objeto JSON
    
  • .end:

    • Finaliza a resposta HTTP sem adicionar cabeçalhos ou fazer formatação adicional.

    • Pode incluir dados diretamente como um buffer ou string, mas não faz formatação automática.

    • Não define automaticamente o cabeçalho Content-Type .

    • Não faz formatação ou inferência do conteúdo.

    • É útil para cenários de respostas de baixo nível.

    res.end(); // Finaliza a resposta sem enviar conteúdo
    res.end('Hello World'); // Envia a string e finaliza
    res.end(Buffer.from('Hello World')); // Envia um buffer e finaliza
    
  • **.json:

    • O .json()  converte um objeto JavaScript (ou um valor) para o formato JSON e envia a resposta.

    • Ele define automaticamente o cabeçalho Content-Type  da resposta como application/json , informando ao cliente que a resposta contém dados no formato JSON.

    • Também converte o objeto JavaScript para uma string JSON, o que permite que os dados sejam facilmente lidos e interpretados por clientes como navegadores, APIs, ou aplicativos.

    res.json(data);
    
  • Exemplo 1:

    • Não funciona:

    res.status(500).json({ message: (error as Error).message }); 
    res.send('(get_personagem) Find com erro.');  // Essa linha será ignorada.
    
    • Funciona:

    res.status(500).json({ 
        message: (error as Error).message,
        log: '(get_personagem) Find com erro.'
    });
    
  • Exemplo 2:

    • Funciona:

    res.status(200).send('(put_criaturas) Sucesso.\n');
    
    res.status(200).send(); // Responde com 200 e sem conteúdo
    
    • Não funciona:

    res.status(200);
    

Oak (Deno)

Deno Serve Deno.serve(...)

  • .