|
| 1 | +--- |
| 2 | +title: Introdução ao Node.js |
| 3 | +layout: learn |
| 4 | +authors: Lucas-Steffen |
| 5 | +--- |
| 6 | + |
| 7 | +# Introdução ao Node.js |
| 8 | + |
| 9 | +Node.js é um ambiente de execução JavaScript de código aberto e multiplataforma. É uma ferramenta popular para praticamente qualquer tipo de projeto! |
| 10 | + |
| 11 | +O Node.js executa o mecanismo JavaScript V8, o núcleo do Google Chrome, fora do navegador. Isso permite que o Node.js tenha um desempenho muito bom. |
| 12 | + |
| 13 | +Um aplicativo Node.js é executado em um único processo, sem a necessidade de criar uma nova thread para cada requisição. O Node.js fornece um conjunto de primitivas de I/O assíncronas em sua biblioteca padrão que impedem o bloqueio do código JavaScript. Além disso, as bibliotecas em Node.js geralmente são escritas usando paradigmas não bloqueantes. Consequentemente, o comportamento de bloqueio é a exceção, e não a regra, no Node.js. |
| 14 | + |
| 15 | +Quando o Node.js realiza uma operação de I/O, 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 retoma as operações quando a resposta é recebida. |
| 16 | + |
| 17 | +Isso permite que o Node.js lide com milhares de conexões simultâneas em um único servidor sem a sobrecarga de gerenciar a concorrência de threads, o que poderia ser uma fonte significativa de bugs. |
| 18 | + |
| 19 | +O Node.js possui uma vantagem única, pois milhões de desenvolvedores front-end que escrevem JavaScript para o navegador agora podem 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. |
| 20 | + |
| 21 | +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ê decide 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. |
| 22 | + |
| 23 | +## Um exemplo de aplicação Node.js |
| 24 | + |
| 25 | +O exemplo mais comum de "Olá Mundo" em Node.js é um servidor web: |
| 26 | + |
| 27 | +```cjs |
| 28 | +const { createServer } = require('node:http'); |
| 29 | + |
| 30 | +const hostname = '127.0.0.1'; |
| 31 | +const port = 3000; |
| 32 | + |
| 33 | +const server = createServer((req, res) => { |
| 34 | + res.statusCode = 200; |
| 35 | + res.setHeader('Content-Type', 'text/plain'); |
| 36 | + res.end('Hello World'); |
| 37 | +}); |
| 38 | + |
| 39 | +server.listen(port, hostname, () => { |
| 40 | + console.log(`O servidor está rodando em http://${hostname}:${port}/`); |
| 41 | +}); |
| 42 | +``` |
| 43 | + |
| 44 | +```mjs |
| 45 | +import { createServer } from 'node:http'; |
| 46 | + |
| 47 | +const hostname = '127.0.0.1'; |
| 48 | +const port = 3000; |
| 49 | + |
| 50 | +const server = createServer((req, res) => { |
| 51 | + res.statusCode = 200; |
| 52 | + res.setHeader('Content-Type', 'text/plain'); |
| 53 | + res.end('Hello World'); |
| 54 | +}); |
| 55 | + |
| 56 | +server.listen(port, hostname, () => { |
| 57 | + console.log(`O servidor está rodando em http://${hostname}:${port}/`); |
| 58 | +}); |
| 59 | +``` |
| 60 | + |
| 61 | +Para executar este trecho de código, salve-o como um arquivo `server.js` e execute `node server.js` no seu terminal. |
| 62 | +Se você usar a versão mjs do código, deverá salvá-la como um arquivo. `server.mjs` e execute `node server.mjs` no seu terminal. |
| 63 | + |
| 64 | +Este código inclui primeiro o Node.js [`http` module](https://nodejs.org/api/http.html). |
| 65 | + |
| 66 | +O Node.js tem uma fantástica [standard library](https://nodejs.org/api/), Incluindo suporte de primeira classe para redes. |
| 67 | + |
| 68 | +O método `createServer()` do `http` cria um novo servidor HTTP e o retorna. |
| 69 | + |
| 70 | +O servidor está configurado para escutar na porta e no nome do host especificados. Quando o servidor estiver pronto, a função de retorno de chamada é invocada, neste caso, informando que o servidor está em execução. |
| 71 | + |
| 72 | +Sempre que uma nova solicitação é recebida, o [`request` event](https://nodejs.org/api/http.html#http_event_request) é chamada, fornecendo dois objetos: uma solicitação (um [`http.IncomingMessage`](https://nodejs.org/api/http.html#http_class_http_incomingmessage) object) e uma resposta (uma [`http.ServerResponse`](https://nodejs.org/api/http.html#http_class_http_serverresponse) object). |
| 73 | + |
| 74 | +Esses dois objetos são essenciais para lidar com a chamada HTTP. |
| 75 | + |
| 76 | +O primeiro fornece os detalhes da requisição. Neste exemplo simples, ele não é usado, mas você poderia acessar os cabeçalhos e os dados da requisição. |
| 77 | + |
| 78 | +O segundo é usado para retornar dados para quem fez a chamada. |
| 79 | + |
| 80 | +Neste caso, com: |
| 81 | + |
| 82 | +```js |
| 83 | +res.statusCode = 200; |
| 84 | +``` |
| 85 | + |
| 86 | +Definimos a propriedade `statusCode` como `200`, para indicar uma resposta bem-sucedida. |
| 87 | + |
| 88 | +Definimos o cabeçalho `Content-Type`: |
| 89 | + |
| 90 | +```js |
| 91 | +res.setHeader('Content-Type', 'text/plain'); |
| 92 | +``` |
| 93 | + |
| 94 | +E fechamos a resposta, adicionando o conteúdo como um argumento para `end()`: |
| 95 | + |
| 96 | +```js |
| 97 | +res.end('Hello World\n'); |
| 98 | +``` |
| 99 | + |
| 100 | +Se você não fez isso ainda, então, [instale](https://nodejs.org/en/download) o Node.js. |
0 commit comments