1. Instalação
Primeiro, acesse http://nodejs.org para baixar e instalar. A versão que estou descendo é 0,8.14. A instalação é muito simples, o próximo passo é o próximo. Em seguida, configure o diretório de instalação no caminho, e o MSI instalará o NPM (Node Package Manager) juntos.
Meu diretório de instalação é C:/Arquivos de Programas (x86)/NodeJS. Neste momento, use o comando CMD Command Window node -v e npm -v para visualizar a versão instalada no comando NPM -V
1.1. Helloworld
Crie um novo arquivo hello.js no diretório do projeto Node.js e digite uma linha de código
console.log ('Olá, nodejs.');Digite o console da linha de comando, digite o diretório do projeto Node.js e o Node Type Hello.js
O console sai "Hello, NodeJS".
1.2. Versão da web do helloworld
Crie um novo http.js no diretório do projeto Node.js, o código é o seguinte
var http = requer ("http"); http.createServer (function (request, resposta) {Response.writehead (200, {"content-type": "text/html"}); resposta.write ("hello world!); resposta.end ();}).Inicie o serviço na linha de comando e clique em Node http.js
Em seguida, abra a barra de endereço do navegador e digite http: // localhost: 8000/e veja Hello World! saída na página e é bem -sucedida.
A versão do Node.js deve ser sincronizada com a API
O número da versão do Node.js é regular, até a versão estável, a versão ímpar é uma versão não estável
2 Análise de código Helloworld
Ok, comece a analisar nossa linha de Helloworld a partir de agora.
Introduzir módulos
var http = requer ("http");O método requer é usado para introduzir um módulo e o parâmetro é o nome do módulo. Por exemplo, o módulo do sistema de arquivos pode ser introduzido da seguinte maneira:
var fs = requer ("fs");Podemos usar o método requer () como um método global, mas, na verdade, é mais como um método local pertencente a um determinado módulo. Sua documentação está aqui: https://nodejs.org/api/globals.html.
O método requer retorna uma instância de um determinado módulo, como requer ("http") retorna uma instância HTTP. A documentação de referência para instâncias HTTP está aqui: https://nodejs.org/api/http.html.
Vemos que o módulo HTTP possui um método CreateServer (), que envolve nossa segunda linha de código.
Criar um servidor
O método CreateServer () do módulo HTTP aceita um método como um parâmetro, e o protótipo é:
http.createServer ([RequestListener])
RequestListener é um método que estará associado ao evento de solicitação da classe HTTP.Server. Dessa forma, quando a solicitação do cliente chegar, o RequestListener será chamado.
RequestListener possui dois parâmetros, e o protótipo da função é o seguinte:
função (solicitação, resposta) {} O tipo da primeira solicitação de parâmetro é http.IncomingMessage , que implementa a interface Readable Stream .
O tipo do segundo parâmetro é http.ServerResponse , que implementa a interface Writeable Stream .
A API do fluxo está aqui: https://nodejs.org/api/stream.html. Ao mesmo tempo, a solicitação e a resposta são os EventEmitters, que podem emitir eventos específicos.
A API do EventEmitter está aqui: https://nodejs.org/api/events.html#events_class_events_eventemitter. Mais tarde, falaremos sobre como usar o EventEmitter para lançar e processar eventos.
Vamos revisar o código que criamos o servidor:
http.createServer (function (request, resposta) {Response.writehead (200, {"content-type": "text/plana"}); resposta.write ("hello world!"); resposta.end ();}). Ouça (8000);http.createServer retorna uma instância http.server. O método de escuta do http.server pode deixar o servidor ouvir em uma determinada porta, que é 8000 no exemplo.
Como você pode ver, fornecemos uma função anônima ao método CreateServer. Neste método, escrevemos de volta o "Hello World!" mensagem para o cliente através do parâmetro de resposta.
Analise as solicitações do cliente
Analisamos o método http.createServer anteriormente. Seus parâmetros são um método com dois parâmetros. Um representa a solicitação enviada pelo cliente e o outro representa a resposta para escrever de volta ao cliente. Vamos dar uma olhada nos parâmetros de solicitação.
A solicitação é uma instância de http.IncomingMessage . Através desta instância, podemos obter os parâmetros de solicitação, como método HTTP, versão http, URL, cabeçalho, etc. A API específica está aqui: https://nodejs.org/api/http.html#http_http_incomingmessage.
Vamos dar uma olhada modificando o helloworld.js (salve como helloworld2.js). O código é o seguinte:
// Introduzir módulo http var http = requer ("http"); // Crie um servidor, especificando a função que lida com o cliente solicita http.createServer (function (request, resposta) {console.log ("método -" + request.method); console.log ("versão -" + request.httpversion); console.log ("url -" + cem); "texto/plano"}); console.log ("Hello World Start ouvir na porta 8000");Como você pode ver, usei o objeto de console para produzir algumas informações de depuração e método HTTP impresso, versão, URL e outras informações. Você pode executar o node helloworld2.js, o navegador visita http: // localhost: 8000 e, em seguida, executar na linha de comando para ver qual informação é saída. Eu sou assim:
Nosso simples helloworld já pode enviar alguns dados de resposta ao cliente, e você pode ver as palavras "Hello World!" em seu navegador. Esta resposta é enviada ao cliente por meio de uma response de instância do http.ServerResponse .
http.ServerResponse também é um Stream ou EventEmitter. Por meio dele, retornamos o código de status HTTP, dados, cabeçalhos HTTP e outras informações ao cliente.
Módulo HTTP
No módulo HTTP do Node.js, a linha de status é gravada no cliente através do método Writehead de http.ServerResponse. O protótipo do método Writehead é o seguinte:
Response.WriteHead (StatusCode [, StatusMessage] [, cabeçalhos])
O primeiro parâmetro deste método é o SatadusCode, que é um número como 200 e 403. Os parâmetros restantes são opcionais. O último parâmetro são os cabeçalhos, onde você pode usar a notação de objeto JSON para escrever alguns cabeçalhos HTTP, como: {“Content-Type”:”text/plain”,”Content-Length”:11} . O primeiro parâmetro opcional StatusMessage é usado para especificar uma mensagem de descrição de status, que não pode ser preenchida.
Cabeçalho HTTP
O cabeçalho é alguns pares de valor-chave. Por exemplo, o "Type de conteúdo" que vemos no Helloworld é a tag de cabeçalho usada para indicar o tipo de dados, que pode corresponder a arquivos de texto, imagens, vídeos, binários etc. Da mesma forma, "conteúdo" é usado para especificar o comprimento dos dados. Existem muito mais, como "data", "conexão", etc. Consulte o link anterior.
O cabeçalho também pode ser definido separadamente usando o método da response.setHeader(name, value) do http.ServerResponse, e um cabeçalho HTTP pode ser definido por vez.
dados
Após o cabeçalho, há dados. Alguns códigos de status, como 200, terão alguns dados no futuro. E alguns, como 301, 404, 403, 500, a maioria deles não possui dados.
Os dados são escritos de volta ao cliente através do método de gravação de http.serverResponse, por exemplo:
Response.setheader ("conteúdo-tipo", "text/html");Aqui precisamos mencionar que existem dois métodos comuns de codificação de transmissão de dados HTTP:
Defina o comprimento do conteúdo, transfira dados de comprimento fixo, defina o cabeçalho de codificação de transferência como em chunked, transfira dados em pedaços
Como o nosso exemplo atual de helloworld, sem definir o cabeçalho do comprimento de conteúdo, o módulo HTTP de Node.js Padrivs na codificação em chunked .
Usamos as ferramentas de desenvolvedor do navegador Chrome para visualizar dados de rede, que podem ser vistos claramente. Como mostrado na figura abaixo:
Resposta HTTP
Os três pontos que eu marquei são todas as informações do cabeçalho HTTP passadas para o navegador pelo exemplo do Helloworld.
Escrevemos dados para o cliente através do método de gravação de http.ServerResponse. Você pode gravar todos os dados de uma só vez, ou pode gravar os dados separadamente e várias vezes. Quando a quantidade de dados a serem transferidos é grande, escrever várias vezes é uma abordagem mais razoável. Por exemplo, se você enviar um arquivo grande para o cliente, ele será mais adequado para escrever várias vezes. Você também pode usar o recurso assíncrono do Node.js para obter um bom desempenho.