Programação do lado do servidor Web com NodeJS

arquitetura cliente/servidor

        Antes de examinarmos o HTTP, apresentaremos brevemente as propriedades do ambiente em que operam. Isso geralmente é chamado de ambiente cliente/servidor.

Um sistema cliente/servidor simples possui um ou mais processos cliente e um processo servidor, conforme mostrado na figura a seguir:

        Embora isto pareça simples, existem diversas propriedades que o tornam mais complexo do que o esperado. Os clientes são entidades independentes executadas em muitos sistemas de computadores diferentes. esse

        Isso significa que precisamos considerar o seguinte:

1. O processo do cliente deve ser compatível com o sistema operacional do cliente. Coisas como suporte a idiomas e protocolos de comunicação de dados devem estar disponíveis e ser compatíveis.

2. A segurança é um problema porque os clientes remotos devem ser autenticados antes de terem permissão para acessar as informações do servidor.

3. Muitos computadores clientes diferentes significam que, eventualmente, um ou mais irão quebrar durante alguma comunicação cliente/servidor. Isto requer que a instalação se recupere da situação.

4. Se o servidor puder ser acessado por muitos clientes, a disponibilidade do servidor e a recuperação de erros precisarão ser suportadas, especialmente se o relacionamento cliente/servidor for um relacionamento comercial cliente/fornecedor.

5. Os tempos de resposta para interações cliente/servidor devem ser aceitáveis ​​e gerenciáveis.

6. Na escala das redes da Internet, também temos que considerar como os clientes encontram servidores entre os milhões de servidores que podem acessar.

        Devemos também perceber que a simples arquitetura cliente/servidor ilustrada acima não significa que todos os clientes estejam em máquinas diferentes. Em uma arquitetura cliente/servidor, é perfeitamente permitido que um ou mais processos cliente e servidor estejam no mesmo sistema de computador.

        Os sistemas cliente/servidor modernos são ainda mais complexos. O diagrama abaixo ilustra como interagimos com qualquer combinação de clientes e servidores em um sistema de computador. Vários clientes coexistem com vários servidores em qualquer sistema de computador. Além disso, os processos clientes podem acessar vários servidores para atingir seus objetivos, e os servidores podem atuar como clientes para satisfazer suas próprias necessidades.

 

        Agora você notará que em ambos os diagramas acima, o termo middleware abaixo da seta representa a interação cliente/servidor. Middleware é o componente de software exigido por um sistema cliente/servidor para atingir os objetivos acima. É o software entre o programa cliente e o sistema operacional e o programa servidor e o sistema operacional. Ele isola os programadores de clientes e servidores das complexidades relacionadas à compatibilidade, segurança, posicionamento mútuo, etc., fornecendo uma interface padronizada.

        O middleware que abordaremos é o Hypertext Transfer Protocol (HTTP) e a infraestrutura usada para suportá-lo. Devido à natureza desta unidade (sistema móvel) estaremos interessados ​​principalmente no lado cliente da infraestrutura. Contudo, entender o que está acontecendo no lado do servidor é crucial para entender melhor as limitações e vantagens desta tecnologia.

Servidor de rede

        Um servidor web é o lado do servidor de um sistema cliente/servidor baseado em HTTP. Eles são agora a tecnologia de servidor dominante na Internet, principalmente devido à popularidade da Web e aos desenvolvimentos no design de software de rede. Embora o "hipertexto" em HTTP fosse originalmente um documento HTML, existem agora muitos outros formatos de dados usados ​​em HTTP, alguns dos quais examinaremos nesta unidade. Nesta seção, cobrimos as operações básicas do servidor web. Nas seções a seguir, modificamos o HTML em uma linguagem de marcação de documentos e discutimos como os links HTML formam a interação básica com um servidor Web. Veremos então a tag <form> porque ela fornece uma maneira para o cliente enviar dados ao servidor Web, permitindo que o servidor Web construa uma página exclusiva para enviar de volta ao cliente. A seguir, veremos um sistema CGI simples que permite a um servidor Web executar programas que criam páginas para clientes. Algumas outras tecnologias modernas que substituíram o CGI para servidores web de alto volume, PHP e ASP serão examinadas.

        O servidor web é a parte do servidor do cliente/servidor que interage com as páginas HTML. Na sua forma mais simples, ele simplesmente aceita uma solicitação de uma página HTML e envia uma cópia armazenada da página ao cliente solicitante. No entanto, os servidores web modernos são muito mais complexos do que esta simples interação sugere.

                As etapas envolvidas em uma interação típica com um servidor web são as seguintes:

1. Um cliente web (geralmente um navegador web) envia uma solicitação de página web pela Internet.

2. O servidor valida a solicitação para garantir que a página exista, que qualquer software necessário esteja instalado e que as restrições de segurança sejam atendidas.

3. Qualquer software exigido pelo servidor para executar solicitações de clientes.

4. O servidor coleta a página HTML do sistema de arquivos do servidor ou como saída do programa.

5. O servidor envia o documento HTML de volta ao cliente pela Internet.

        As etapas 1 e 2 usam o protocolo HTTP para enviar solicitações ao servidor e páginas HTML ao cliente. HTTP é um protocolo muito simples que utiliza mensagens REQUEST e RESPONSE para interagir entre clientes e servidores. Embora não precisemos conhecer os detalhes do HTTP, é útil ver o formato geral dessas mensagens. A tabela a seguir mostra o formato geral de mensagens de solicitação HTTP e mensagens de amostra.        

Forma geral de solicitação HTTP Pedido de amostra
método resource_id HTTP_version
cabeçalho: valor
cabeçalho: valor
linha em branco
mensagem_corpo _

OBTER /jdk1.3/docs/index.html HTTP/1.0

Aceitar: texto/html

Agente do usuário: MacWeb

        Neste exemplo, o método "GET" é um dos métodos HTTP possíveis. A versão HTTP é 1.0, neste caso não há corpo da mensagem. Observe que o identificador do recurso é simplesmente o nome do arquivo do recurso no servidor. O nome do computador do servidor não é necessário porque para enviar uma mensagem o cliente já deve encontrar o nome do servidor para saber para onde enviar a mensagem.

        A tabela a seguir mostra a forma geral de uma resposta HTTP e um exemplo real de resposta contendo uma página HTML.

Forma geral de resposta HTTP Exemplo de resposta

HTTP_versão código_resultado resultado_comment

cabeçalho: valor

cabeçalho: valor

linha em branco

Corpo da mensagem

HTTP/1.0 200 OK

Servidor: Apache/1.3

Mime_versão: 1.0

Tipo_de_conteúdo: texto/html

<html>… </html>

        Esta resposta HTTP usa o protocolo versão 1.0 e retorna o código de resultado 200. Seus pares cabeçalho/valor indicam que o servidor é um servidor Apache versão 1.3 e uma página HTML é enviada de volta no corpo da mensagem.

        Agora você encontrou Localizadores Universais de Recursos (URLs). Por exemplo, o seguinte URL identifica uma página web chamada spike.scu.edu.au localizada em um servidor web em /jdk1.3/docs/index.html, que é acessível através do protocolo HTTP.

http://spike.scu.edu.au/jdk1.3/docs/index.html

        A mensagem de solicitação HTTP requer apenas a localização do arquivo no servidor web porque o protocolo (HTTP) é selecionado pela primeira parte da URL e o servidor foi encontrado usando o nome do computador na URL, neste caso spike.scu.edu .au. Você pode ter visto outros protocolos como HTTPS e FTP (https: e ftp:) usados ​​em URLs.

Programação do lado do servidor

        A programação do lado do servidor refere-se ao processo de desenvolvimento ou programação diretamente no servidor.

        A vantagem de usar a programação do lado do servidor é que os dados subjacentes são acessíveis localmente; nenhuma conexão de rede ou recursos externos são necessários para acessar os dados. Além disso, o código incorporado executado no servidor costuma ser mais rápido que o código do lado do cliente, o que exige que o usuário acesse o banco de dados para acessar os dados. Estudaremos o acesso ao banco de dados usando NodeJS no módulo da Semana 4.

        Além disso, a programação do lado do servidor permite que o código seja incorporado diretamente no banco de dados. O código pode ser gerenciado e restaurado usando ferramentas padrão de backup de banco de dados, assim como qualquer outro objeto de banco de dados.

        Nesta seção, discutiremos o NodeJS no contexto de uma linguagem de programação do lado do servidor e exploraremos os conceitos necessários para construir nosso primeiro aplicativo de servidor usando NodeJS. Mas antes disso, revisitaremos alguns tópicos importantes como HTTP, a API necessária para construir nossa primeira aplicação de servidor.

Protocolo de transferência de hipertexto (HTTP)

        Como parte deste módulo, você precisará compreender o Protocolo de Transferência de Hipertexto (HTTP), um protocolo usado por redes de computadores. Existem outros protocolos como SMTP (Simple Mail Transfer Protocol), FTP (File Transfer Protocol), POP3 (Post Office Protocol 3), etc.

        Os protocolos fornecem formatos de mensagens, regras, sintaxe, semântica bem definidos, etc., permitindo que dispositivos com diferentes hardwares e softwares interajam entre si. Qualquer dispositivo compatível com um protocolo específico pode se comunicar com qualquer outro dispositivo da rede.

        O Hypertext Transfer Protocol (HTTP) é indiscutivelmente um dos protocolos de aplicação da Internet mais amplamente adotados na história. É o método pelo qual clientes e servidores se comunicam pela Internet. Além dos navegadores, o HTTP é o protocolo preferido para quase todos os aplicativos que se conectam à Internet.

        O fato de a maioria dos sistemas operacionais incluir protocolos de rede como HTTP por padrão significa que não precisamos instalar nenhum software adicional para acessar a Internet.

        O protocolo HTTP que impulsiona a Web é chamado de protocolo sem conexão. É o protocolo usado pelos navegadores da web para se comunicar com os servidores da web. Cada vez que um link é clicado, um formulário é enviado ou uma pesquisa é realizada, uma solicitação é enviada do navegador para o servidor de destino. Após solicitar imagens, vídeos e texto do servidor, o navegador e o servidor não estão mais conectados. Isso ocorre porque ele opera em um modelo de solicitação/resposta.

        Ao enviar uma solicitação, você deve incluir a URL que identifica o recurso e o método que será aplicado (como recuperar, excluir ou publicar). Informações adicionais podem ser incluídas na forma de parâmetros de URL (pares campo-valor), dados POST ou cookies.

        O protocolo HTTP define diretrizes claras para a comunicação entre clientes e servidores.

  • Normalmente, as solicitações HTTP são enviadas apenas pelo cliente ao servidor. O servidor responde às solicitações HTTP dos clientes. Ao usar uma tecnologia chamada server push, o servidor também pode preencher o cache do cliente com informações antes de solicitá-las.
  • Ao solicitar um arquivo via HTTP, o cliente deve fornecer a URL do arquivo.
  • O servidor web deve responder a cada solicitação HTTP, pelo menos com uma mensagem de erro.

Tags HTML e formulário <form>

        Você viu a tag HTML <form> na unidade anterior. O que não discutimos até agora é como devemos enviar dados para um servidor remoto e gerenciar atrasos e erros que ocorrem na transferência de dados. Então, como revisão, revisitaremos a tag HTML normal <form> aqui.

        Um exemplo da tag HTML <form> retirada do site Java (java.sun.com) é o seguinte:

  <form action="/cgi-bin/coffee" method="post">
    Would you care for a cup of coffee?<BR>
    <INPUT type="radio" name="coffee" value="Y" CHECKED="checked"/>Yes
    <INPUT type="radio" name="coffee" value="N"/>No<P>
    If yes:<BR/>
    What flavor?
    <SELECT name="flavor" size="1">
      <OPTION value="French Roast"/>French Roast
      <OPTION value="Vienna Roast"/>Vienna Roast
      <OPTION value="Almond Mocha"/>Almond Mocha
    </SELECT><BR/>
    <INPUT type="checkbox" name="cream" value="Y"/>Include Cream
    <INPUT type="checkbox" name="sugar" value="Y"/>Include Sugar<br/>
    <INPUT type="submit" value="Brew It"/>
  </form>

        O atributo action desta tag <form> especifica um programa para manipular os dados a serem enviados ao servidor (neste caso, /cgi-bin/coffee). O servidor web usa essas informações para iniciar programas para processar os dados. O atributo method usa seu  valor post  para especificar que o método HTTP POST deve ser usado em solicitações HTTP para enviar dados ao servidor.

        Esta tag também constrói um conjunto de controles visuais que permitem ao usuário cliente selecionar valores a serem enviados ao servidor Web interpretando tags separadas por <form> e </form>. O navegador exibirá algo semelhante à imagem abaixo.

        Neste exemplo, a tag <input> é usada para construir botões de opção, caixas de seleção e o botão "Brew It" na parte inferior do formulário. A tag <select> é usada para construir um menu suspenso que permite ao usuário selecionar o tipo de café.

Interface de Gateway Comum (CGI)

        Na seção anterior, vimos como usar a tag <form> para coletar dados do usuário e enviá-los ao servidor para processamento. O primeiro sistema do lado do servidor a usar esses dados foi o Common Gateway Interface, sempre referido simplesmente como CGI.

        CGI é um sistema simples no qual o servidor web inicia um programa chamado programa CGI para processar dados de formulário. O programa CGI gera então uma página HTML, que o servidor envia de volta ao cliente. O diagrama a seguir mostra a interação completa entre cliente e servidor.

        Este diagrama mostra como o formulário é carregado primeiro do servidor Web, possivelmente por meio de uma solicitação CGI anterior. O usuário cliente então opera o formulário e envia os dados do formulário ao servidor para processamento. O servidor então começa a processar o programa CGI especificado pelo atributo action na tag <form>, que lê os dados do cliente e gera uma página HTML para o servidor enviar de volta ao cliente. Finalmente, o cliente exibe a página web gerada.

        Os dados são coletados pelo navegador da Web quando o usuário clica no botão de envio ou substitui a interação de envio, como a execução de uma função JavaScript apropriada. Os dados são montados em pares rótulo/valor antes de serem transmitidos ao servidor. Os pares são organizados no formato tag=value, com pares individuais separados pelo caractere "&". O navegador também substitui caracteres especiais por caracteres que podem ser transmitidos por HTTP, por exemplo, espaços são substituídos por “+”.

        O programa CGI busca dados do cliente nos mesmos pares tag/valor do servidor Web. Por exemplo, digamos que selecionamos os controles para o exemplo do café da seção anterior, conforme mostrado abaixo.

        O navegador construirá a seguinte string para enviar de volta ao programa CGI e usará o método HTTP POST para enviar os dados de volta ao programa CGI:

  flavor=Vienna+Roast&cream=Y&coffee=Y

        Agora você deve compará-lo cuidadosamente com o código HTML fornecido acima. Observe que a ordem das tags é diferente da ordem declarada na tag HTML <form>. De modo geral, este é o caso, os programas CGI não podem confiar em nenhuma ordem de tags. Além disso, observe como a caixa de seleção chamada açúcar não está representada nesta string. Normalmente, isso também é verdade quando a caixa de seleção está desmarcada, ou seja, apenas as caixas de seleção marcadas retornam pares rótulo/valor.

        A próxima etapa na interação cliente/servidor é o servidor Web receber a solicitação HTTP POST e passar os detalhes da mensagem HTTP para o programa CGI designado usando variáveis ​​de ambiente. O programa CGI recupera então as variáveis ​​de ambiente para determinar o padrão da solicitação HTTP. Observe que você pode ter visto variáveis ​​de ambiente antes, como PATH ou CLASSPATH. Os sistemas CGI utilizam diferentes variáveis, que podem ser recuperadas por programas CGI.

        Neste exemplo, o programa CGI descobrirá que a solicitação CGI está usando o modo POST para que possa ler os pares rótulo/valor da entrada padrão do programa. O programa deve interpretar a string passada para remover vários caracteres inseridos ("=", "?", "+", etc.). O programa construirá uma estrutura de dados interna para conter as tags e seus valores associados.

        Os programas CGI podem então processar os dados acessando bancos de dados, arquivos e outros programas. Finalmente, o programa CGI grava a página HTML diretamente no fluxo de saída padrão do programa. Isso pode ser feito em um programa Java CGI, por exemplo, usando a função System.out.println().

        Quando um programa CGI fecha sua saída padrão ou sai, o servidor Web envia a página HTML de volta ao cliente. Se o cliente for um navegador da web, ele exibirá a página da web.

        O CGI tem vários problemas que o tornam inadequado para servidores web de alto volume:

        1. O sistema CGI é lento. Isto ocorre porque o servidor Web deve iniciar um novo programa para cada solicitação CGI. Iniciar um programa CGI requer reunir muitos recursos do sistema e carregar o programa a partir do sistema de arquivos. Sistemas melhores evitam esses problemas usando programas que permanecem em execução na memória do computador.

        2.CGI não tem estado. Sem estado significa que o programa CGI não lembra qual cliente enviou a última solicitação CGI, portanto não lembra o que o cliente fez na última solicitação. Isso significa que as interações CGI são normalmente aplicativos de uma tela e uma resposta, e cookies e outros dispositivos de salvamento de estado foram introduzidos para resolver esse problema.

        3. A programação CGI é difícil. A solução para o problema 2 torna a programação CGI bastante complicada. Melhores sistemas foram desenvolvidos para facilitar a programação.

Transferência de Estado Representacional (REST)

        A Transferência de Estado Representacional (REST) ​​​​tornou-se um método comum para organizar aplicativos baseados no protocolo HTTP. Ele usa cabeçalhos de mensagens HHTP e atributos de protocolo de forma natural e altamente relevante. Nesta seção, descreveremos os principais recursos implementados pelos serviços da web RESTful (como são comumente conhecidos).

        Existem quatro aspectos principais dos serviços da web REST:

        1. Com HTTP, os tipos de mensagens (GET, POST, PUT, etc.) têm significados claros;

        2. A comunicação não tem estado;

        3. A estrutura de diretórios dos dados é exposta ao cliente e ao servidor; e

        4. Os dados são transferidos em XML ou outro tipo MIME especificado no cabeçalho HTTP.

Use NodeJS para criar um servidor web e carregar arquivos HTML

        pré-requisitos:
  • Certifique-se de que o Node.js esteja instalado em seu computador
  • Você aprendeu o básico necessário para criar um servidor Web.
        Crie um servidor web:
  1. Crie uma nova pasta chamada "Meu Servidor"
  2. Crie um novo arquivo chamado "web-server.js" na pasta recém-criada my-server
  3. Adicione o seguinte código ao arquivo "web-server.js".
        A primeira coisa a fazer é carregar o módulo http padrão encontrado em qualquer instalação do Node.js. O módulo http contém funções para criação de servidores.
const http = require("http");

        A seguir definiremos duas constantes, o host e a porta que serão atribuídas ao servidor:

const host = 'localhost';
const port = 8080

        Os servidores Web lidam com solicitações de navegadores e outros clientes, conforme discutimos na seção anterior. Ao usar nomes de domínio, você pode interagir com servidores Web, que são traduzidos em endereços IP por um servidor DNS. localhost é o nome do endereço fornecido quando o computador se conecta à rede, também conhecido como endereço de loopback. Também conhecido como “Endereço IP interno 127.0.0.1”, só está disponível no computador local e não em qualquer rede ou Internet da qual façamos parte.

        Todos os dispositivos conectados em rede possuem portas padronizadas, cada uma com um número exclusivo. Existem muitas portas reservadas para protocolos específicos. Por exemplo, a porta 80 é a porta padrão atribuída para mensagens HTTP (Hypertext Transfer Protocol).

        Um endereço IP permite a transmissão de mensagens de e para um dispositivo específico. Um número de porta, por outro lado, permite que um serviço ou aplicativo específico atinja um dispositivo específico e atue como um gateway. Aqui usamos 8080 como nosso número de porta. Se o servidor tiver sido configurado com sucesso, poderemos acessá-lo via http em  http://localhost:8080  .

        Após acessar o servidor, o próximo passo será exibir a mensagem. Para fazer isso, precisamos criar uma função.

const requestLis = function (req, res) {
    res.end("Hello world, this is my first web server using NodeJS");
};

        No Node.js, todas as funções de ouvinte de solicitação aceitam dois parâmetros, req e res. A solicitação HTTP do usuário é capturada no objeto request, que corresponde ao primeiro parâmetro req. O objeto de resposta no segundo parâmetro res (res) é usado para gerar a resposta HTTP retornada ao usuário. A função res.end() retorna a resposta HTTP ao cliente.

        A última etapa envolve criar nosso servidor e configurá-lo para se comunicar com os clientes usando um ouvinte de solicitação.
const server = http.createServer(requestLis);
server.listen(port, host, () => {
    console.log(`Server is up and running on http://${host}:${port}`);
});

        Agora, salve o arquivo e vá para Powershell ou Terminal e execute o seguinte comando

node web-server.js

        Agora você deve conseguir visualizar as seguintes informações no PowerShell/Terminal.

Server is up and running on http://localhost:8080

Carregue arquivos HTML usando NodeJS:

        Usando o módulo fs que discutimos na seção anterior, podemos carregar arquivos HTML e usar seus dados ao escrever respostas HTTP.

        Crie um documento HTML que será retornado pelo servidor web.

index.html

        Adicione algum código ao arquivo html para tornar a página da web atraente.

        Importe fs-module.js escrevendo o código a seguir em seu servidor web para usar a função readFile() necessária para carregar arquivos HTML.

const fs = require('fs').promises;

        Para cumprir as práticas recomendadas de Javascript moderno, usamos uma variante de promessas, daí .promises.

        Por fim, adicione o seguinte código a webserver.js.

Crie um servidor HTTP usando Express (estrutura Node.js)

        Várias estruturas, como Express.js e Koa.js, estão disponíveis para Node.js. Essas estruturas fornecem uma variedade de recursos úteis de middleware, bem como muitos outros recursos úteis que os desenvolvedores podem aproveitar em vez de desenvolverem eles próprios. Neste curso, exploraremos a estrutura Express.js e criaremos um servidor HTTP.

        Para usar o framework Express, primeiro você precisa instalar o express. Para fazer isso, você deve ir ao Powershell/Terminal e digitar o seguinte comando.

npm install express

        Em seguida, use a função require() para importar o esquema denominado express. Para usar a estrutura Express, você deve primeiro importar um esquema chamado express usando a função require(). Aqui está um exemplo de como importar um módulo usando a estrutura Express.

const express = require('express');
const app = express();

        A função require() é chamada inicialmente especificando o nome do módulo como uma string ('express') e então o objeto retornado é chamado para criar a aplicação Express. Você pode então acessar as propriedades e funções do objeto de aplicativo.

        Crie um novo arquivo chamado app.js e use o código a seguir.

const express = require('express');
const app = express();
const port = 8000;

app.get('/', function(req, res) {
  res.send('Hello World!')
});

app.listen(port, function() {
  console.log(`Example app listening on port ${port}!`)
});

        Vá para Powershell ou Terminal e execute o código

node ./app.js

Acho que você gosta

Origin blog.csdn.net/qq_54813250/article/details/133431438
Recomendado
Clasificación