Como construir um servidor web simples com Node.js – SitePoint


O Node.js é um ambiente de tempo de execução JavaScript de código aberto e de plataforma cruzada, permitindo que os desenvolvedores criem aplicativos do lado do servidor fora de um navegador. Pode ser usado para criar aplicativos de produção crítica de missão que tenham um desempenho extremamente bom. Neste guia prático, veremos como você pode criar seu servidor da web com o Node.js.

Takeaways -chave

  • Implementando um servidor web simples com o Node.js. Este guia mostra como configurar e implantar um servidor da web usando o Node.JS. Ele caminha por cada etapa, incluindo a inicialização do projeto, a integração Express.js e muitos recursos essenciais, fornecendo uma base sólida para qualquer pessoa nova no Node.js.
  • Construindo aplicativos dinâmicos da Web. Este guia abrange uma ampla variedade de funcionalidades, como lidar com formulários, responder às solicitações de usuário e servir dinamicamente páginas da Web, essenciais para tornar seus aplicativos da Web interativos e envolventes.
  • Explorando os recursos do node.js. Mergulhe mais nas ofertas do Node.JS para o desenvolvimento da Web, incluindo como trabalhar com arquivos estáticos, lidar com erros e implementar envios de formulários. Este guia fornece uma abordagem prática para usar o Node.js para criar aplicativos da Web ricos em recursos.

Parte 1: Configuração e instalação do projeto

Etapa 1: Instale Node.js e NPM

Para começar a criar nosso aplicativo da web, verifique se você tem Node.js e npm instalado no seu sistema. O Node.js fornece um ambiente de tempo de execução JavaScript, enquanto o NPM é o gerenciador de pacotes do Node.JS. Você pode baixar e instalar o Node.js no site oficial.

Para garantir que o Node.js e o NPM estejam instalados corretamente, abra seu terminal e execute os seguintes comandos:

node -v
npm -v

Texto diz: "C: \ Usuários \ chameera> node -v v16.20.1 c: (usuários \ chameera> npm -v 8.19.4″ loading=”lazy”/></p>
<h3 class=Etapa 2: Inicialize um novo projeto Node.js

Crie um novo diretório para o seu projeto e inicialize um novo projeto Node.js, executando o seguinte comando em seu terminal:

mkdir book-club
cd book-club
npm init -y

Este comando criará um package.json Arquive o seu projeto. Ele conterá metadados sobre o projeto, incluindo suas dependências:

{ 
  "name": "book-club", 
  "version": "1.0.0", 
  "description": "", 
  "main": "index.js", 
  "scripts": { "test": 
  "echo \"Error: no test specified\" && exit 1" }, 
  "keywords": (), 
  "author": "", 
  "license": "ISC" }

Etapa 3: Instale Express.js

Express.js é uma estrutura popular da Web para Node.js, com recursos para a criação de aplicativos da Web e móveis. O comando abaixo instala express.js e adiciona -o como uma dependência em seu package.json arquivo:

npm install express

Parte 2: Configurando o servidor Express

Etapa 1: Crie um novo arquivo para o servidor

Agora que o projeto está configurado, crie um novo arquivo chamado app.js no diretório do projeto. Este arquivo conterá o código para o servidor Express.

Etapa 2: importar express.js

No topo do seu app.js Arquivo, importe o módulo Express.js:

const express = require('express');

Etapa 3: Crie um aplicativo expresso

Em seguida, crie uma instância de um aplicativo expresso:

const app = express();

O express() A função é uma função de nível superior exportada pelo módulo Express. Ele cria um aplicativo expresso, que atribuímos ao app variável.

Etapa 4: defina uma rota

Defina uma rota para o caminho / com uma mensagem simples quando acessado:

app.get("https://www.sitepoint.com/", (req, res) => {
 res.send('Hello World!');
});

Aqui, app.get() é uma função que informa ao servidor o que fazer quando uma solicitação GET é feita para um caminho específico, neste caso, /. Esta função leva dois argumentos: o caminho e uma função de retorno de chamada que requer uma solicitação e uma resposta.

Etapa 5: Inicie o servidor

Finalmente, vamos iniciar o servidor na porta 3000:

const port = 3000;
app.listen(port, () => {
 console.log(`Server is running at http://localhost:${port}`);
});

O app.listen() A função inicia o servidor e faz com que ouça solicitações na porta especificada.

Parte 3: Construindo a funcionalidade do aplicativo

Agora que temos o servidor expresso configurado, vamos começar a criar a funcionalidade do aplicativo, criando algumas rotas diferentes.

Etapa 1: Crie um novo arquivo para mensagens

No seu diretório de projeto, crie um novo arquivo nomeado messages.js. Este arquivo conterá as mensagens que seu servidor enviará como respostas:

module.exports = {
 home: 'Welcome to our Book Club!',
 about: 'About Us',
 notFound: '404 Not Found'
};

Etapa 2: importar mensagens para o seu arquivo de servidor

No topo do seu app.js Arquivo, importe as mensagens:

const messages = require('./messages');

Etapa 3: Use mensagens em suas rotas

Agora, use estas mensagens nas rotas:

app.get("https://www.sitepoint.com/", (req, res) => {
 res.send(messages.home);
});
app.get('/about', (req, res) => {
 res.send(messages.about);
});
app.use((req, res) => {
 res.status(404).send(messages.notFound);
});

Aqui, app.use() é um método que é solicitado a cada solicitação feita ao servidor. Estamos usando aqui para lidar com todas as rotas que não são definidas e enviam um 404 Not Found mensagem.

Parte 4: Adicionando porção de arquivo estático

Etapa 1: Crie um novo diretório para arquivos estáticos

Crie um novo diretório nomeado public. Este diretório conterá todos os seus arquivos estáticos:

mkdir public

Etapa 2: adicione alguns arquivos estáticos

Para os fins deste guia, vamos adicionar um arquivo HTML simples e um arquivo CSS. Em seu public diretório, crie um novo arquivo chamado index.html e adicione o seguinte código:

DOCTYPE html>
<html>
<head>
  <title>Book Clubtitle>
  <link rel="stylesheet" type="text/css" href="/styles.css">
head>
<body>
  <h1>Welcome to our Book Club!>/h1>
body>
html>

Além disso, crie um novo arquivo chamado styles.css no public diretório e adicione o seguinte código:

body {
  font-family: Arial, sans-serif;
}

Etapa 3: Use Express.Static para servir arquivos estáticos

Adicione a linha abaixo ao app.js Arquivo, antes das definições de rota:

app.use(express.static('public'));

O express.static A função é uma função de middleware embutida no Express.js. Ele serve arquivos estáticos e pega o nome do diretório do qual você deseja servir os arquivos como argumento.

Captura de tela de uma página da web. Texto diz: "Bem -vindo ao nosso clube do livro!"

Parte 5: Lidando com solicitações de postagem

Etapa 1: adicione um formulário a index.html

Em seu index.html Arquivo, adicione um formulário com um único campo de entrada e um botão de envio:

<form action="/submit" method="post">
  <input type="text" name="book" placeholder="Enter a book title">
  <button type="submit">Submitbutton>
form>

Este formulário enviará uma solicitação de postagem para o /submit caminho. O corpo de solicitação incluirá o valor do campo de entrada.

Etapa 2: Instale o Body-Parser

Você precisa instalar um middleware chamado PARSURADOR DE CORPO Para lidar com os dados enviados na solicitação de postagem:

npm install body-parser

Etapa 3: Importar e usar o Body-Parser

Importar-se-psador para o app.js arquivo:

const bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: false }));

O bodyParser.urlencoded() A função analisa os órgãos solicitados de solicitação disponíveis no req.body propriedade.

Etapa 4: lidar com solicitações de postagem

Agora, crie um novo endpoint para lidar com esta solicitação de postagem no app.js arquivo:

app.post('/submit', (req, res) => {
  const book = req.body.book;
  console.log(`Book submitted: ${book}`);
  res.send(`Book submitted: ${book}`);
});

O aplicativo, mostrando nossa mensagem de boas -vindas, além de uma caixa de texto para enviar títulos de livros

Parte 6: Adicionando um armazenamento de dados

Nesta parte, adicionaremos um armazenamento de dados simples ao nosso aplicativo para armazenar os livros que os usuários enviam. Usaremos uma matriz para armazenar os dados para simplificar.

Etapa 1: Crie um armazenamento de dados

No topo do seu app.js Arquivo, crie uma matriz para armazenar os livros:

const books = ();

Etapa 2: Atualize o manipulador de solicitação de postagem

Atualize o manipulador para solicitações de postagem para adicionar o livro enviado ao books variedade:

app.post('/submit', (req, res) => {
    const book = req.body.book;
    books.push(book);
    console.log(`Book submitted: ${book}`);
    res.send(`Book submitted: ${book}`);
});

Etapa 3: Crie uma rota para ver todos os livros

Crie um novo manipulador de rota que retorne todos os livros enviados:

app.get('/books', (req, res) => {
  res.send(books.join(', '));
});

Nota: Em um aplicativo do mundo real, você provavelmente armazenaria seus dados em um banco de dados. Aqui, os dados da matriz serão perdidos toda vez que você reinicia seu servidor.

Parte 7: Adicionando manipulação de erros

Nesta parte, criaremos um manipulador de erros. Express.js fornece um manipulador de erros interno. Mas você também pode criar seu próprio middleware de manuseio de erros.

Etapa 1: Crie um middleware de manuseio de erros

Em seu app.js Arquivo, adicione o seguinte código no final do arquivo:

app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(500).send('Something Went Wrong!');
});

Esta função de middleware tem quatro argumentos em vez dos três usuais (reqAssim, resAssim, next). Esta função é chamada sempre que há um erro em seu aplicativo.

Etapa 2: use a próxima função para passar erros

Se você passar um argumento para o next() Função, Express.js assumirá que é um erro, pulará todas as funções subsequentes do middleware e irá direto para a função de middleware de manuseio de erros:

app.post('/submit', (req, res, next) => {
  const book = req.body.book;
  if (!book) {
    const err = new Error('Book title is required');
    return next(err);
  }
  books.push(book);
  console.log(`Book submitted: ${book}`);
  res.send(`Book submitted: ${book}`);
});

Este manipulador verifica se um título de livro foi fornecido na solicitação de postagem. Caso contrário, cria um novo Error objeto e passa para o next função. Isso pulará todas as funções subsequentes do middleware e irá direto para o middleware de manuseio de erros.

Parte 8: Servindo páginas HTML

Nesta parte, modificaremos nosso aplicativo para servir páginas HTML em vez de texto simples. Isso permitirá que você crie interfaces de usuário mais complexas.

Etapa 1: Instale EJS

EJS (JavaScript incorporado) é uma linguagem de modelos simples que permite gerar marcação HTML usando JavaScript simples:

npm install ejs

Etapa 2: Defina EJs como o mecanismo de exibição

Em seu app.js Arquivo, defina o EJS como o mecanismo de exibição para o seu aplicativo expresso:

app.set('view engine', 'ejs');

Isso diz ao Express para usar o EJS como o mecanismo de exibição ao renderizar as visualizações.

Etapa 3: Crie um diretório de visualizações

Por padrão, o Express procurará em um diretório nomeado views para suas opiniões. Crie este diretório no diretório do seu projeto:

mkdir views

Etapa 4: Crie uma visão EJS

Em seu views diretório, crie um novo arquivo chamado index.ejs e adicione o seguinte código:

DOCTYPE html>
<html>
<head>
    <title>Book Clubtitle>
head>
<body>
    <h1><%= message %>h1>
    <form action="/submit" method="post">
        <input type="text" name="book" placeholder="Enter a book title">
        <button type="submit">Submitbutton>
    form>
    <h2>Submitted Books:h2>
    <ul>
        <% books.forEach(function(book) { %>
            <li><%= book %>li>
        <% }); %>
    ul>
body>
html>

O <%= message %> O espaço reservado é usado para produzir o valor da variável de mensagem.

Etapa 5: Atualize o manipulador de solicitação de postagem

Atualize a postagem /submit manipulador de rota para adicionar o livro enviado ao books Matriz e redirecionar o usuário de volta para a página inicial:

app.post('/submit', (req, res) => {
  const book = req.body.book;
  books.push(book);
  console.log(`Book submitted: ${book}`);
  res.redirect("https://www.sitepoint.com/");
});

Nota: é uma boa prática redirecionar o usuário após uma solicitação de postagem. Isso é conhecido como o Publicar/redirecionar/obter padrãoe impede os envios de formulários duplicados.

Etapa 6: atualize a rota doméstica

Atualize o Get / manipulador de rota para passar nos livros array para o index.ejs:

app.get("https://www.sitepoint.com/", (req, res) => {
   res.render('index', { message: messages.home, books: books });
});

Etapa 7: atualize a rota doméstica

Agora é hora de executar o aplicativo e vê -lo em ação.

Você pode iniciar o servidor executando o seguinte comando em seu terminal:

node app.js

Você deve ver uma mensagem dizendo Server is running at http://localhost:3000 no terminal.

Texto diz: ›book-club@1.0.0 Iniciar> O Node App-J5 Server está em execução em http: // localhost: 3000″ loading=”lazy”/></p>
<p>Como alternativa, você pode simplificar o processo de início adicionando um script ao <code>package.json</code> arquivo:</p>
<pre class=

Now, instead of running node app.js você pode ligar npm start:

npm start

O aplicativo acabado, mostrando uma caixa de texto para adicionar novos livros, seguida de uma lista de livros enviados

Conclusão

Parabéns! Você criou um aplicativo da Web com Node.js e Express.js. Este aplicativo serve arquivos estáticos, lida com rotas diferentes, usa middleware e muito mais.

Se você quiser experimentar isso por si mesmo, ou quiser explorar o código, consulte isso CodeSandbox demo.

Há muito mais que você pode fazer com Node.js e Express.js. Você pode adicionar mais rotas, conectar-se a diferentes bancos de dados, criar APIs, criar aplicativos em tempo real com o WebSockets e muito mais. As possibilidades são infinitas.

Espero que este guia tenha sido útil. Codificação feliz!

Perguntas frequentes (perguntas frequentes)

Como posso lidar com o roteamento em um servidor da web node.js?

Você pode usar o Módulo HTTP Lidar com as rotas manualmente, verificando o URL do objeto de solicitação. No entanto, à medida que os aplicativos se tornam mais complexos, é recomendável usar uma estrutura como o Express.js. Ajuda a definir rotas com base nos métodos HTTP e URLs de maneira modular e limpa.

Como posso implementar a comunicação em tempo real em um servidor da web node.js?

A comunicação em tempo real em um servidor da web node.js pode ser implementada usando o WebSockets. A biblioteca Socket.io é popular para adicionar suporte ao WebSocket a um servidor Node.js. Permite a comunicação em tempo real, bidirecional e baseada em eventos entre clientes e o servidor.

Qual é a melhor maneira de gerenciar operações de banco de dados nos servidores da Web Node.js?

A melhor maneira de gerenciar operações de banco de dados no Node.js é usar as ferramentas ORM (mapeamento de objetos-relatórios) ou ODM (mapeamento de documentos de objeto). Eles fornecem abstração de alto nível para interações de banco de dados e simplifica o agrupamento de conexões, construção de consultas e validação de esquema.
Para bancos de dados SQL: SequeleizarAssim, Typeorm
Para bancos de dados NoSQL: MangustoAssim, Couchbase

Como posso lidar com erros globalmente em um aplicativo Express.js?

O manuseio global de erros em um aplicativo Express.js pode ser implementado definindo uma função especial de middleware com quatro argumentos: (err, req, res, próximo). Este middleware deve ser adicionado afinal App.use () e chamadas de rota. Dentro desta função, você pode registrar o erro, definir o código de status da resposta e enviar uma mensagem de erro.

Como você pode garantir que um servidor da web node.js seja escalável?

Existem várias maneiras de garantir a escalabilidade de um servidor da web node.js:
Usando o módulo de cluster para aproveitar os sistemas de vários núcleos.
Otimizando as consultas de código e banco de dados.
Implementando estratégias de cache.
Usando balanceadores de carga para distribuir o tráfego em várias instâncias de aplicativos.
Além disso, o design do aplicativo sem estado permite a escala horizontal adicionando mais instâncias conforme necessário.



Source link