Criar uma nova aplicação Web de arquitetura Express
As empresas geralmente armazenam uma grande quantidade de dados em sistemas de arquivos e bancos de dados. Eles acessam esses dados servindo-os por meio de aplicativos da Web a partir de APIs usando HTTP.
Servidores Web e aplicações Web
Um servidor web é um software que responde a solicitações de clientes. Uma aplicação Web fica na parte superior do servidor Web. Alguns ambientes, como o Node.js, fornecem o servidor Web e a aplicação Web em uma estrutura. Neste módulo, o servidor web é fornecido pelo HTTP
módulo. A aplicação Web é fornecida pela estrutura Express.js e inclui o servidor Web.
Saiba mais:
- Aplicativos Web: O aplicativo entrega um aplicativo Web ao cliente:
- Visualmente com HTML, CSS e JavaScript
- Dados com APIs
- Visual e dados com uma combinação de HTML, CSS, JavaScript e APIs. Esta é considerada uma aplicação monolítica.
- Roteamento de URL: o roteamento de URL é um mecanismo para fornecer funcionalidade do servidor Web quando um endereço de URL específico é solicitado. Por exemplo, a URL
/products
pode estar associada a uma função que retorna uma lista de produtos. A URL/products/1
pode estar associada a uma função que retorna um produto específico. - Cabeçalhos HTTP: São pares chave-valor que são enviados do cliente para o servidor. Eles contêm informações sobre a solicitação ou resposta.
- Suporte para diferentes tipos de conteúdo: um cliente pode solicitar dados em um formato específico e pode retornar nesse formato, como texto sem formatação, JSON, HTML ou CSV.
- Autenticação/autorização: alguns dados podem ser confidenciais. É possível que um utilizador precise de iniciar sessão ou ter uma função ou nível de permissão específico para aceder aos dados. Isso é tratado no cabeçalho HTTP.
- Intercâmbio de dados: os utilizadores poderão ter de visualizar e adicionar dados ao sistema. Para adicionar dados, os usuários podem inserir dados em um formulário ou carregar arquivos.
- Time to market: Para criar aplicações web e APIs de forma eficiente, escolha ferramentas e estruturas que forneçam soluções para problemas comuns. Essas opções ajudam o desenvolvedor a atender rapidamente aos requisitos de negócios do trabalho.
Módulo HTTP no Node.js
O Node.js inclui um módulo HTTP incorporado. É um módulo relativamente pequeno que processa a maioria dos tipos de pedido. Ele suporta tipos comuns de dados, como cabeçalhos, URL e dados.
O exemplo de código a seguir é um servidor Web simples que escuta solicitações de entrada na porta 3000. Ele responde com uma mensagem hello world
de texto simples para o cliente, independentemente da rota de URL ou cabeçalhos HTTP usados.
// Include the HTTP module
const http = require('http');
// Set the port to 3000
const PORT = 3000;
// 1. Process incoming requests (req), reply with response (res)
const requestHandler = (req, res) => {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('hello world');
}
// 2. Create a server with the requestHandler
const server = http.createServer(requestHandler);
// 3. Start listening for incoming requests on port
server.listen(PORT, () => {
console.log(`listening on port ${PORT}`)
})
Este exemplo configura o aplicativo Web com as seguintes etapas:
- requestHandler: A função lê a solicitação () e determina qual resposta (
req
res
) enviar. - server: O
createServer()
método é definido com o manipulador de solicitação. Como há apenas um manipulador de solicitação, o servidor sempre responderá com a mesma resposta. Em um aplicativo do mundo real, você teria vários manipuladores de solicitação para lidar com diferentes tipos de solicitações e rotas diferentes. Esta questão será abordada mais pormenorizadamente mais adiante. - server.listen: O
listen()
método é invocado com uma porta especificada. Após a chamada para o método, o servidor está pronto para aceitar solicitações delisten()
cliente. Quando executado localmente, o aplicativo estará disponível emhttp://localhost:3000
. Aconsole.log
instrução é executada para informar ao desenvolvedor que o servidor está pronto para uso.
Este exemplo de código Express.js usa vários estilos de funções:
- retorno de chamada em
server.listen(PORT string, callback_function)
- função de seta na
requestHandler = (req, res) => {}
qual tem regras de escopo diferentes de uma função regular
Express.js quadro
Até aqui, ficou a saber mais sobre as capacidades do módulo HTTP no Node.js. É uma escolha perfeitamente válida para aplicações Web mais pequenas. Se uma aplicação se tornar grande, uma arquitetura como o Express poderá ajudar a criar a arquitetura de forma dimensionável.
Depois de criar alguns aplicativos Web, você notará que resolve os mesmos problemas repetidamente. São habituais os problemas de gestão de rotas, a autenticação e a autorização e a gestão de erros. Neste ponto, você começa a procurar uma estrutura como o Express que resolva alguns ou todos esses problemas.
Gestão de rotas no Express
Quando um cliente faz uma solicitação para um aplicativo Web, ele usa uma URL, que é um endereço que aponta para um servidor específico. Um URL poderá ter este aspeto:
http://localhost:3000/products
O termo localhost
no URL refere-se à sua própria máquina. Um URL mais voltado para a produção pode ter trocado o termo localhost
por um nome de domínio como microsoft.com
. A parte final do URL é a rota. Ele decide um lugar lógico específico para ir no servidor. Neste caso, a rota é /products
.
A arquitetura Express utiliza o URL, a rota e os verbos de HTTP para a gestão das rotas. Verbos HTTP como post
, put
e get
descrevem a ação desejada pelo cliente. Cada verbo HTTP tem um significado específico para o que deve acontecer aos dados. O Express ajuda a registar rotas e a emparelhá-las com os verbos HTTP adequados para organizar a aplicação Web. O Express tem métodos dedicados ao processamento de diferentes verbos HTTP e tem um sistema inteligente para associar diferentes rotas a diferentes blocos do código.
No exemplo a seguir, o Express ajuda você a lidar com solicitações direcionadas a uma rota com o endereço /products
associado ao verbo get
HTTP :
app.get('/products', (req, res) => {
// handle the request
})
Express vê app.get
for /products
como diferente de for /products
, conforme mostrado neste próximo exemplo de app.post
código:
app.get('/products', (req, res) => {
// handle the request
})
app.post('/products', (req, res) => {
// handle the request
})
O verbo get
HTTP significa que um usuário deseja ler dados. O verbo post
HTTP significa que eles querem escrever dados. É comum dividir seu aplicativo para que diferentes emparelhamentos de rotas e verbos executem diferentes partes de código. Este conceito será abordado mais detalhadamente mais adiante.
Servir diferentes tipos de conteúdo
O Express suporta muitos formatos de conteúdo que podem ser devolvidos para um cliente de chamada. O res
objeto vem com um conjunto de funções auxiliares para retornar diferentes tipos de dados. Para devolver texto simples, teria de utilizar o método send()
da seguinte forma:
res.send('plain text')
Para outros tipos de dados, como JSON, existem métodos dedicados que garantem que o tipo de conteúdo correto e as conversões de dados sejam feitas. Para retornar JSON no Express, use o json()
método, da seguinte forma:
res.json({ id: 1, name: "Catcher in the Rye" })
O método de código Express anterior é equivalente a este código de módulo HTTP:
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({ id: 1, name: "Catcher in the Rye" }))
O Content-Type
cabeçalho em HTTP é definido e a resposta também é convertida de um objeto JavaScript para uma cadeia de caracteres antes de ser retornada ao cliente chamador.
Se compararmos os dois exemplos de código, poderá ver que o Express guarda algumas linhas de escrita, ao utilizar métodos auxiliares para tipos de ficheiros comuns, como JSON e HTML.
Criar uma aplicação Express
Para começar a programar uma aplicação Node.js com a arquitetura Express, precisa de a instalar como uma dependência. Também é recomendado que inicialize primeiro um projeto Node.js, para que todas as dependências transferidas sejam incluídas no ficheiro package.json. É uma recomendação geral para todas as aplicações programadas para o runtime Node.js. As vantagens desta ação surgem ao emitir o código para um repositório como o GitHub. Qualquer pessoa a obter o código do GitHub pode facilmente utilizar o código que escreveu ao instalar as respetivas dependências.
Para criar um aplicativo Web com a estrutura Express, as etapas típicas incluem:
- Criar o aplicativo Web: crie uma instância do aplicativo Web. Neste ponto, o servidor web não pode ser executado, mas você tem algo que pode estender.
- Definir rotas e manipuladores de rotas: defina quais rotas o aplicativo deve ouvir. A gestão de rotas típica inclui:
- rota raiz: '/'
- Rotas de recursos: '/Products'
- Rota geral: '*'
- Configurar middleware: Middleware é uma parte do código que pode ser executado antes ou depois de uma solicitação. Os exemplos incluem autenticação, validação de dados e registro.
- Iniciar o aplicativo: defina uma porta e instrua o aplicativo a ouvir essa porta. Agora, a aplicação está pronta para receber pedidos.