Analise o código Node.JS, exibido a seguir, que estabelece um servidor HTTP que recebe e responde mensagens. var http = require('http'); http.createServer(function (req, res) { res.write('Ok'); res.end(); }).listen(8080); Assinale a afirmativa correta a respeito dessa operação.
- A)A função definida é executada somente em caso de erro de parâmetros.
Errada, porque a funcao callback de createServer nao depende de erro de parametros; ela e executada a cada requisicao HTTP recebida.
- B)A função definida é sempre executada no lado cliente.
Errada, porque o codigo roda no lado servidor, nao no lado cliente.
- C)O parâmetro req da função definida deve ser do tipo http.IncomingMessage object.
Certa, porque em Node.js o parametro req do callback de createServer e um objeto http.IncomingMessage.
- D)O parâmetro req da função definida é opcional.
Errada, porque o parametro req faz parte da assinatura esperada do callback e nao e opcional nessa operacao.
- E)O parâmetro res da função definida é opcional.
Errada, porque o parametro res tambem faz parte da assinatura padrao do callback e e necessario para enviar a resposta.
Gabarito: C
Esse trecho cria um servidor HTTP em Node.js. A chamada http.createServer recebe uma função de callback que será executada sempre que uma requisicao chegar ao servidor, recebendo dois parametros padrao: req e res. O req representa a mensagem de entrada, com os dados da requisicao feita pelo cliente, e o res representa a resposta que o servidor vai montar e devolver. Em outras palavras, voce recebe a chamada, prepara a resposta e encerra a conversa com res.end(). No caso da questao, o ponto importante e identificar o tipo do parametro req. Em Node.js, ele corresponde a um objeto do tipo http.IncomingMessage, que encapsula a requisicao HTTP recebida. Isso e o que a alternativa C afirma, por isso ela esta correta. A propria documentacao do Node.js define o primeiro parametro do callback de createServer como IncomingMessage e o segundo como ServerResponse. As outras alternativas tentam confundir voce com ideias de cliente, erro de parametros ou opcionalidade. Mas aqui nao ha misterio: a funcao e do lado servidor, e tanto req quanto res fazem parte do contrato da API. Se voce trocar esses parametros ou imaginar que sao opcionais por padrao, cai na pegadinha. Resumo pratico: req chega com a pergunta do cliente, res vai com a resposta do servidor. No codigo, res.write('Ok') envia o conteudo e res.end() fecha a resposta. Simples, elegante e muito cobrado em prova.