Introdução ao Node.js
Node.js é um ambiente de execução JavaScript de código aberto e multiplataforma. É uma ferramenta popular para quase todos os tipos de projetos!
O Node.js executa o mecanismo JavaScript V8, o núcleo do Google Chrome, fora do navegador. Isso permite que o Node.js seja muito eficiente.
Um aplicativo Node.js é executado em um único processo, sem criar uma nova thread para cada requisição. O Node.js fornece um conjunto de primitivas de E/S assíncronas em sua biblioteca padrão que impedem que o código JavaScript seja bloqueado e, geralmente, as bibliotecas em Node.js são escritas usando paradigmas não bloqueadores, tornando o comportamento de bloqueio a exceção e não a norma.
Quando o Node.js executa uma operação de E/S, como ler da rede, acessar um banco de dados ou o sistema de arquivos, em vez de bloquear a thread e desperdiçar ciclos de CPU esperando, o Node.js retomará as operações quando a resposta retornar.
Isso permite que o Node.js manipule milhares de conexões simultâneas com um único servidor sem introduzir o fardo de gerenciar a concorrência de threads, o que pode ser uma fonte significativa de bugs.
O Node.js tem uma vantagem única porque milhões de desenvolvedores de frontend que escrevem JavaScript para o navegador agora são capazes de escrever o código do lado do servidor, além do código do lado do cliente, sem a necessidade de aprender uma linguagem completamente diferente.
No Node.js, os novos padrões ECMAScript podem ser usados sem problemas, pois você não precisa esperar que todos os seus usuários atualizem seus navegadores - você é responsável por decidir qual versão do ECMAScript usar alterando a versão do Node.js e também pode habilitar recursos experimentais específicos executando o Node.js com flags.
Um Exemplo de Aplicação Node.js
O exemplo mais comum de Hello World do Node.js é um servidor web:
import { createServer } from 'node:http'
const hostname = '127.0.0.1'
const port = 3000
const server = createServer((req, res) => {
res.statusCode = 200
res.setHeader('Content-Type', 'text/plain')
res.end('Hello World')
})
server.listen(port, hostname, () => {
console.log(`Servidor executando em http://${hostname}:${port}/`)
})
Para executar este snippet, salve-o como um arquivo server.js
e execute node server.js
no seu terminal. Se você usar a versão mjs do código, você deve salvá-lo como um arquivo server.mjs
e executar node server.mjs
no seu terminal.
Este código primeiro inclui o módulo http do Node.js.
O Node.js possui uma biblioteca padrão fantástica, incluindo suporte de primeira classe para redes.
O método createServer()
de http
cria um novo servidor HTTP e o retorna.
O servidor é configurado para escutar na porta e no nome do host especificados. Quando o servidor está pronto, a função de callback é chamada, neste caso, informando-nos que o servidor está em execução.
Sempre que uma nova requisição é recebida, o evento de requisição é chamado, fornecendo dois objetos: uma requisição (um objeto http.IncomingMessage
) e uma resposta (um objeto http.ServerResponse
).
Esses 2 objetos são essenciais para lidar com a chamada HTTP.
O primeiro fornece os detalhes da requisição. Neste exemplo simples, ele não é usado, mas você poderia acessar os cabeçalhos da requisição e os dados da requisição.
O segundo é usado para retornar dados ao chamador.
Neste caso com:
res.setHeader('Content-Type', 'text/plain')
definimos a propriedade statusCode para 200, para indicar uma resposta bem-sucedida.
Definimos o cabeçalho Content-Type:
res.setHeader('Content-Type', 'text/plain')
e fechamos a resposta, adicionando o conteúdo como um argumento para end()
:
res.end('Hello World')
Isso enviará a resposta para o cliente.