Obtendo as respostas
Como criar servidor http usando NodeJS
Após vermos o console.log do NodeJS vamos começar com o módulo http e trabalhar com requests e responses. Uma das coisas mais legais do Node é a sua modularidade.
O módulo http é o responsável pelas requisições, mas antes de começarmos com esse tema, vamos falar um pouco sobre os módulos e a sua utilidade no NodeJS.
Módulos
A perspectiva de módulos em Javascript foi desenvolvida por diversas pessoas incluindo Richard Cornford que em 2003. [1]
O Node tem um sistema simples de carregamento de módulos. Cada módulo carrega o arquivo com o seu nome, um modulo chamado cycle, vai carregar o arquivo JavaScript cycle.js na mesma pasta. Podemos navegar entre pastas usando os link relativos (ex. ../pasta_desejada).
O mesmo não se aplica para módulos do core (serão chamados de core modules). Core modules são compilados em binários e os métodos e propriedades, são bem explicados na documentação. Esses Core Modules são carregados a partir de seus identificadores e não precisam estar na mesma pasta como acontece com os módulos que construímos, outro ponto importante é que ao colocar um ./ o node não vai tratar com core module.
O primeiro desses Core Modules que vamos ver é o http.
http
A interface HTTP do Node, foi projetada para suportar os muitos recursos desse protocolo tão complexo e muitas vezes difícil de usar. Assim podemos usar esse recurso tanto como um client http e como server.
Agora que já temos noção de módulos e o que ele fará por nós, vamos a primeira linha de código que vai nos ajudar com algo realmente útil.
var http = require(‘http’);
Assim temos a interface http a nossa disposição para criarmos nosso server .
O módulo http, merece um artigo só dele, em um artigo futuro vamos detalhar o que ele pode fazer por nós. Agora o foco será ver a chamada do método createServer() do módulo http. O createServer retorna um novo objeto web server, para esse objeto precisamos passar uma callback function que será associado aos listeners do evento request.
O JavaScript é uma linguagem assíncrona e com isso precisa de callbacks functions ou funções que executam após a execução da primeira chamada. faremos a declaração dela da seguinte forma.
var callback = function(req, res) {
}
Note que a nossa função de callback recebe dois parâmetros req e res.
O ‘request’ que declaramos como ‘req’ é emitido toda vez que existe uma request e é uma instancia do objeto IncomingMessage, ele é criado tanto pelo http.Server como pelo http.ClientRequest.
O ‘response’ é um objeto criado internamente pelo servidor e implementa uma interface WritableStream, se você quiser saber de quais tipos é só dar uma olhada na documentação, será passado como segundo parâmetro para o evento ‘resquest’, no caso recebemos ele no ‘res’ de nosso callback.
Voltando ao nosso createServer.
http.createServer(callbackFunction).listen(1337, ‘127.0.0.1’);
Após declararmos o createServer chamamos o método listen, se você não está familiarizado com o JavaScript, isso é chamado de chainable ou encadeamento. Simplifica bastante o processo e a leitura do código. No metódo listen() declaramos que porta nosso servidor escutará e por qual endereço vai responder, pode ser usado também com sockets.
Response
Agora já temos um script pronto para escutar uma porta, responder por um endereço (‘127.0.0.1 ou localhost’), receber uma requisição(request) e devolver uma resposta. Essa resposta não será complexa , vamos responder a frase ‘Recebido com sucesso’ em texto simples. Para que isso aconteça precisamos escrever um cabeçalho de resposta e faremos isso dentro da nossa função de callback com o nosso ‘response’.
Recebemos o response através da variável res, ela tem o método writeHead que vamos usar para escrever o nosso cabeçalho. No primeiro paramento informamos os três dígitos do status code definido no protocolo http. E depois passamos um JSON, com mais detalhes. Por enquanto só passaremos o content-type igual a text/plain. Deve ficar como abaixo:
res.writeHead(200, {‘Content-Type’: ‘text/plain’});
Agora vamos enviar o conteúdo que definimos antes como ‘Recebido com sucesso’, usando o método write() enviamos o conteúdo do servidor para o cliente. Não vou entrar muito em detalhes nesse ponto, porque será parte do artigo sobre o módulo http.
res.write(‘Recebido com sucesso’);
Agora vamos finalizar a nossa response chamando o método end(), que sinaliza para o serve que todo os cabeçalhos e conteúdos foram enviados, e o servidor deve considerar a mensagem completa. O método end() deve ser chamado ao final de cada response.
O nosso script agora pode ser executado e responder para um cliente que fizer uma requisição http. O seu código deve se parecer com esse abaixo
Agora tudo o que você precisa é executar seu script no NodeJS [2]
[2] Para mais informações sobre como executar o seu script no NodeJS, leia o artigo anterior. https://medium.com/aprendendo-nodejs/nodejs-desde-de-o-principio-ac77e1513762
Nota do autor: Desculpe pelos quase 6 meses sem essa continuação, esse artigo envolveu muita pesquisa, estudo e leitura da documentação. Quero escrever com o máximo detalhe possível e isso envolve muito estudo, pesquisa e tempo.