TutorialsPoint Node - Js Traduzido
TutorialsPoint Node - Js Traduzido
[Link]
Sobre o tutorial
[Link] é uma estrutura/plataforma baseada em JavaScript muito poderosa, construída no JavaScript V8
Engine do Google Chrome. Ele é usado para desenvolver aplicativos da Web com uso intensivo de E/S,
como sites de streaming de vídeo, aplicativos de página única e outros aplicativos da Web. O [Link] é de
código aberto, totalmente gratuito e usado por milhares de desenvolvedores em todo o mundo.
Público
Este tutorial foi desenvolvido para programadores de software que desejam aprender os conceitos básicos
do [Link] e seus conceitos de arquitetura. Este tutorial fornecerá uma compreensão suficiente de todos os
componentes necessários do [Link] com exemplos adequados.
Pré-requisitos
Antes de prosseguir com este tutorial, você deve ter um entendimento básico de JavaScript.
Como vamos desenvolver aplicativos baseados na web usando [Link], será bom se você tiver algum
conhecimento de outras tecnologias da web, como HTML, CSS, AJAX, etc.
Experimente o exemplo a seguir usando a opção Experimente disponível no canto superior direito da caixa
de código de amostra abaixo (em nosso site):
Todo o conteúdo e gráficos publicados neste e-book são de propriedade da Tutorials Point (I)
Unip. Ltd. O usuário deste e-book está proibido de reutilizar, reter, copiar, distribuir ou republicar qualquer
conteúdo ou parte do conteúdo deste e-book de qualquer maneira sem o consentimento por escrito do editor.
Nós nos esforçamos para atualizar o conteúdo de nosso site e tutoriais o mais rápido e preciso possível, no
entanto, o conteúdo pode conter imprecisões ou erros. Ponto de Tutoriais (I) Unip.
Ltd. não oferece garantia quanto à precisão, pontualidade ou integridade de nosso site ou de seu conteúdo,
incluindo este tutorial. Se você descobrir algum erro em nosso site ou neste tutorial, avise-nos em
contact@[Link]
eu
Machine Translated by Google
[Link]
Índice
Sobre o Tutorial ........................................................ .................................................. ........................................... eu
Público................................................. .................................................. .................................................. ...... eu
ii
Machine Translated by Google
[Link]
[Link]
Criando RESTful para uma biblioteca ............................................. .................................................. ....................... 126 Listar
usuários ........................ .................................................. .................................................. ....................... 128
Adicionar usuários ................................................. .................................................. .................................................. 129
Mostrar detalhes................................................ .................................................. ......................................... 130
Excluir um usuário................................................ .................................................. ............................................. 131
4
Machine Translated by Google
1. Introdução [Link]
O que é o [Link]?
[Link] é uma plataforma do lado do servidor construída no JavaScript Engine do Google Chrome (V8 Engine).
O [Link] foi desenvolvido por Ryan Dahl em 2009 e sua versão mais recente é a v0.10.36. A definição de [Link]
conforme fornecida por sua documentação oficial é o seguinte:
[Link] é uma plataforma criada no tempo de execução JavaScript do Chrome para criar facilmente
e aplicativos de rede escaláveis. O [Link] usa um modelo de E/S sem bloqueio e orientado a eventos
que o torna leve e eficiente, perfeito para aplicativos em tempo real com uso intenso de dados executados
em dispositivos distribuídos.
O [Link] é um ambiente de tempo de execução de plataforma cruzada de código aberto para o desenvolvimento
de aplicativos de rede e do lado do servidor. Os aplicativos [Link] são escritos em JavaScript e podem ser
executados no tempo de execução do [Link] no OS X, Microsoft Windows e Linux.
O [Link] também fornece uma rica biblioteca de vários módulos JavaScript que simplificam bastante o
desenvolvimento de aplicativos da Web usando [Link].
Recursos do [Link]
A seguir estão alguns dos recursos importantes que fazem do [Link] a primeira escolha dos arquitetos de software.
• Muito rápido - Sendo construído no motor JavaScript V8 do Google Chrome, biblioteca [Link]
é muito rápido na execução do código.
• Thread único, mas altamente escalável – [Link] usa um modelo de thread único com loop de eventos. O
mecanismo de eventos ajuda o servidor a responder de maneira não bloqueante e torna o servidor
altamente escalável em oposição aos servidores tradicionais que criam threads limitados para lidar com
solicitações. O [Link] usa um único programa encadeado e o mesmo programa pode fornecer serviço
para um número muito maior de solicitações do que servidores tradicionais como o Apache HTTP Server.
• Sem buffer – Os aplicativos [Link] nunca armazenam em buffer nenhum dado. Esses aplicativos
simplesmente emitem os dados em pedaços.
1
Machine Translated by Google
[Link]
Conceitos
O diagrama a seguir descreve algumas partes importantes do [Link] que discutiremos em detalhes nos
capítulos subsequentes.
2
Machine Translated by Google
[Link]
2. Configuração do Ambiente
Você realmente não precisa configurar seu próprio ambiente para começar a aprender [Link]. O motivo é
muito simples, já configuramos o ambiente [Link] online, para que você possa executar todos os exemplos
disponíveis online e aprender na prática. Sinta-se à vontade para modificar qualquer exemplo e verificar os
resultados com diferentes opções.
Experimente o exemplo a seguir usando a opção Experimente disponível no canto superior direito da caixa
de código de amostra abaixo (em nosso site):
Para a maioria dos exemplos fornecidos neste tutorial, você encontrará uma opção Experimente, então faça
uso dela e aproveite seu aprendizado.
Se você deseja configurar seu ambiente para [Link], você precisa ter os dois softwares a seguir em seu
computador, (a) um Editor de Texto e (b) os instaláveis binários [Link].
Editor de texto
Você precisa ter um editor de texto para digitar seu programa. Exemplos de editores de texto incluem
Windows Notepad, comando OS Edit, Brief, Epsilon, EMACS e vim ou vi.
O nome e a versão dos editores de texto podem variar de um sistema operacional para outro. Por exemplo,
o Bloco de Notas será usado no Windows, e o vim ou vi pode ser usado no Windows, assim como no Linux
ou UNIX.
Os arquivos que você cria com seu editor são chamados de arquivos-fonte e contêm o código-fonte do
programa. Os arquivos de origem para programas [Link] geralmente são nomeados com a extensão ".js".
Antes de começar a programar, certifique-se de ter um editor de texto instalado e ter experiência suficiente
em como escrever um programa de computador, salvá-lo em um arquivo e, finalmente, executá-lo.
O código fonte que você escreveria em um arquivo fonte é simplesmente javascript. O interpretador [Link]
interpreta e executa seu código javascript.
A distribuição [Link] vem como um binário instalável para sistemas operacionais SunOS, Linux, Mac OS
X e Windows com arquiteturas de processador x86 de 32 bits (386) e 64 bits (amd64).
3
Machine Translated by Google
[Link]
A seção a seguir explica como instalar a distribuição binária do [Link] em vários sistemas operacionais.
OS Nome do arquivo
janelas [Link]
Linux [Link]
Mac [Link]
SunOS [Link]
$ cd /tmp
$ wget [Link]
$ mkdir -p /usr/local/nodejs
OS Saída
Instalação no Windows
Use o arquivo MSI e siga os prompts para instalar o [Link]. Por padrão, o instalador usa a distribuição [Link] em C:
\Program Files\nodejs. O instalador deve definir o diretório C:\Program Files\nodejs\bin na variável de ambiente PATH do
Windows. Reinicie qualquer prompt de comando aberto para que a alteração tenha efeito.
4
Machine Translated by Google
[Link]
Crie um arquivo js chamado [Link] em sua máquina (Windows ou Linux) com o seguinte código.
$ nó [Link]
Se tudo estiver bem com sua instalação, deve produzir o seguinte resultado:
Olá Mundo!
5
Machine Translated by Google
Antes de criar um "Hello, World!" aplicativo usando [Link], vamos ver os componentes de um aplicativo [Link]. Um
aplicativo [Link] consiste nos três componentes importantes a seguir:
3. Ler solicitação e retornar resposta: O servidor criado em uma etapa anterior lerá a solicitação HTTP feita pelo
cliente que pode ser um navegador ou um console e retornará a resposta.
Usamos a diretiva require para carregar o módulo http e armazenar a instância HTTP retornada em uma variável http da
seguinte forma:
Usamos a instância http criada e chamamos o método [Link]() para criar uma instância do servidor e, em
seguida, a vinculamos à porta 8081 usando o método listen associado à instância do servidor. Passe uma função com os
parâmetros request e response. Escreva a implementação de amostra para sempre retornar "Hello World".
[Link]('Olá Mundo\n');
}).listen(8081);
6
Machine Translated by Google
[Link]
O código acima é suficiente para criar um servidor HTTP que escuta, ou seja, espera uma requisição pela porta 8081 na
máquina local.
[Link]('Olá Mundo\n');
}).listen(8081);
$ nó [Link]
7
Machine Translated by Google
[Link]
Parabéns, você tem seu primeiro servidor HTTP em funcionamento que está respondendo a todas
as solicitações HTTP na porta 8081.
8
Machine Translated by Google
REPL significa Read Eval Print Loop e representa um ambiente de computador como um console Windows ou shell Unix/
Linux onde um comando é inserido e o sistema responde com uma saída em modo interativo. [Link] ou Node vem com
um ambiente REPL. Ele executa as seguintes tarefas:
• Read - Lê a entrada do usuário, analisa a entrada na estrutura de dados JavaScript e armazena na memória.
• Loop - Faz um loop no comando acima até que o usuário pressione ctrl-c duas vezes.
O recurso REPL do Node é muito útil para experimentar códigos [Link] e para depurar códigos JavaScript.
Iniciando REPL
O REPL pode ser iniciado simplesmente executando o node no shell/console sem nenhum argumento da
seguinte forma.
$ nó
Você verá o prompt de comando REPL > onde você pode digitar qualquer comando [Link]:
$ nó
>
Expressão Simples
Vamos tentar uma matemática simples no prompt de comando do [Link] REPL:
$ nó
>1+3
>1+(2*3)-4
9
Machine Translated by Google
[Link]
>
Usar variáveis
Você pode usar variáveis para armazenar valores e imprimir posteriormente como qualquer script convencional.
Se a palavra-chave var não for usada, o valor será armazenado na variável e impresso. Considerando que, se
a palavra-chave var for usada, o valor será armazenado, mas não impresso. Você pode imprimir variáveis
usando [Link]().
$ nó
> x = 10
10
> var y = 10
Indefinido
>x+y
20
Indefinido
O Node REPL suporta expressão multilinha semelhante ao JavaScript. Vamos verificar o seguinte loop do-while
em ação:
$ nó
> var x = 0
Indefinido
> faça {
... x++;
x: 2
x: 3
x: 4
x: 5
Indefinido
>
... vem automaticamente quando você pressiona Enter após o colchete de abertura. O nó verifica automaticamente
a continuidade das expressões.
10
Machine Translated by Google
[Link]
Variável de sublinhado
$ nó
> var x = 10
Indefinido
> var y = 20
Indefinido
>x+y
30
Indefinido
> [Link](soma)
30
Indefinido
>
Comandos REPL
• ctrl + c - encerra o comando atual.
• Teclas para cima/para baixo - veja o histórico de comandos e modifique os comandos anteriores.
Parando REPL
Como mencionado acima, você precisará usar ctrl-c duas vezes para sair do [Link] REPL.
$ nó
>
11
Machine Translated by Google
5. NPM [Link]
• Utilitário de linha de comando para instalar pacotes [Link], fazer gerenciamento de versão e
gerenciamento de dependência de pacotes [Link].
O NPM vem com os instaláveis do [Link] após a versão v0.6.3. Para verificar o mesmo, abra o console e digite o
seguinte comando e veja o resultado:
$ npm --versão
2.7.1
Se você estiver executando uma versão antiga do NPM, é muito fácil atualizá-lo para a versão mais recente. Basta
usar o seguinte comando do root:
[email protected] /usr/lib/node_modules/npm
Por exemplo, a seguir está o comando para instalar um famoso módulo de estrutura da Web [Link] chamado
express:
Agora você pode usar este módulo em seu arquivo js da seguinte forma:
Por padrão, o NPM instala qualquer dependência no modo local. Aqui o modo local refere-se à instalação do pacote
no diretório node_modules localizado na pasta onde o aplicativo Node está presente. Os pacotes implantados
localmente são acessíveis através do método require(). Por exemplo,
quando instalamos o módulo express, ele criou o diretório node_modules no diretório atual onde instalou o módulo
express.
12
Machine Translated by Google
[Link]
$ ls -l
total 0
Alternativamente, você pode usar o comando npm ls para listar todos os módulos instalados localmente.
Isso produzirá um resultado semelhante, mas o módulo será instalado globalmente. Aqui, a primeira linha
mostra a versão do módulo e o local onde está sendo instalado.
[email protected] /usr/lib/node_modules/express
[email protected] ([email protected])
ÿÿÿ [email protected] ([email protected]) ÿÿÿ
[email protected] ([email protected]) ÿÿÿ proxy-
[email protected] ([email protected],
[Link]@0.1.9) ÿÿÿ [email protected]
([email protected], [email protected], [email protected]) ÿÿÿ
ÿÿÿ
[email protected] ([email protected], [email protected])
13
Machine Translated by Google
[Link]
Você pode usar o seguinte comando para verificar todos os módulos instalados globalmente:
$ npm ls -g
Usando o [Link]
[Link] está presente no diretório raiz de qualquer aplicativo/módulo Node e é usado para definir as
propriedades de um pacote. Vamos abrir o [Link] do pacote express presente em node_modules/
express/
"nome": "expresso",
"autor": {
"email": "tj@[Link]"
},
"colaboradores": [
{
"nome": "Aaron Heckmann",
"email": "[Link]+github@[Link]"
},
"email": "ciaranj@[Link]"
},
"email": "doug@[Link]"
},
{
"nome": "Guillermo Rauch",
"email": "rauchg@[Link]"
},
"email": "me@[Link]"
},
14
Machine Translated by Google
[Link]
"email": "shtylman+expressjs@[Link]"
},
"email": "hanul@[Link]"
],
"licença": "MIT",
"repositório": {
"tipo": "git",
"url": "[Link]
},
"homepage": "[Link]
"palavras-chave": [
"expressar",
"estrutura",
"sinatra",
"rede",
"descanso",
"repousante",
"roteador",
"aplicativo",
"api"
],
"dependências": {
"aceita": "~1.2.3",
"depurar": "~2.1.1",
"depd": "~1.0.0",
"escape-html": "1.0.1",
"etag": "~1.5.1",
"finalhandler": "0.3.3",
"fresco": "0.2.4",
[Link]
"métodos": "~1.1.1",
"concluído": "~2.2.0",
"parserl": "~1.3.0",
"path-to-regexp": "0.1.3",
"proxy-addr": "~1.0.6",
"qs": "2.3.3",
"range-parser": "~1.0.2",
"enviar": "0.11.1",
"serve-static": "~1.8.1",
"type-is": "~1.5.6",
"variar": "~1.0.0",
"cookie": "0.1.2",
"merge-descriptors": "0.0.2",
"utils-merge": "1.0.0"
},
"devDependencies": {
"depois": "0.8.1",
"ejs": "2.1.4",
"istambul": "0.3.5",
"marcado": "0.3.3",
"mocha": "~2.1.0",
"deveria": "~4.6.2",
"body-parser": "~1.11.0",
"connect-redis": "~2.2.0",
"cookie-parser": "~1.3.3",
"express-session": "~1.10.2",
"morgan": "~1.5.1",
"multipartidário": "~4.1.1",
"vhost": "~ 3.0.0"
},
"motores": {
"nó": ">= 0.10.0"
},
16
Machine Translated by Google
[Link]
"arquivos": [
"LICENÇA",
"Histó[Link]",
"[Link]",
"[Link]",
"lib/"
],
"roteiros": {
teste de vazamentos/teste/aceitação/",
teste/aceitação/",
teste de vazamentos/teste/aceitação/",
teste de vazamentos/teste/aceitação/"
},
"gitHead": "63ab25579bda70b4927a179b580a9c580b6c7ada",
"insetos": {
"url": "[Link]
},
"_id": "[email protected]",
"_shasum": "8df3d5a9ac848585f00a07777601823faecd3b148",
"_from": "express@*",
"_npmVersion": "1.4.28",
"_npmUser": {
"nome": "dougwilson",
"email": "doug@[Link]"
},
"mantenedores": [
"nome": "tjholowaychuk",
17
Machine Translated by Google
[Link]
"email": "tj@[Link]"
},
"nome": "jongleberry",
"email": "jonathanrichardong@[Link]"
},
"name": "shtylman",
"email": "shtylman@[Link]"
},
"nome": "dougwilson",
"email": "doug@[Link]"
},
{
"nome": "aredridel",
"email": "aredridel@[Link]"
},
"nome": "strongloop",
"email": "callback@[Link]"
},
"nome": "rfeng",
"email": "enjoyjava@[Link]"
],
"dist": {
"shasum": "8df3d5a9ac848585f00a0777601823faecd3b148",
"tarball": "[Link]
},
"diretórios": {},
"_resolved": "[Link]
"readme": "ERRO: Nenhum dado README encontrado!"
18
Machine Translated by Google
[Link]
Atributos do [Link]
• nome - nome do pacote
Desinstalando um módulo
Use o comando a seguir para desinstalar um módulo [Link].
Depois que o NPM desinstala o pacote, você pode verificá-lo examinando o conteúdo do diretório /
node_modules/ ou digitando o seguinte comando:
$ npm ls
Atualizando um módulo
Atualize [Link] e altere a versão da dependência a ser atualizada e execute o comando a seguir.
Pesquisar um módulo
Criar um módulo
A criação de um módulo requer que o [Link] seja gerado. Vamos gerar o [Link] usando o
NPM, que irá gerar o esqueleto básico do [Link].
19
Machine Translated by Google
[Link]
$ npm inicial
Ele cobre apenas os itens mais comuns e tenta adivinhar padrões sãos.
Veja 'npm help json' para documentação definitiva sobre esses campos
nome: (webmaster)
Você precisará fornecer todas as informações necessárias sobre seu módulo. Você pode obter ajuda do
arquivo [Link] mencionado acima para entender os significados de várias informações exigidas. Depois
que o [Link] for gerado, use o comando a seguir para se registrar no site do repositório do NPM usando
um endereço de email válido.
$ npm adduser
Nome de usuário: mcmhd
Senha:
$ npm publicar
Se tudo estiver bem com seu módulo, ele será publicado no repositório e poderá ser instalado usando o NPM
como qualquer outro módulo [Link].
20
Machine Translated by Google
[Link]
6. Conceito de retorno de chamada
O retorno de chamada é um equivalente assíncrono para uma função. Uma função de retorno de chamada é
chamada na conclusão de uma determinada tarefa. Node faz uso pesado de callbacks. Todas as APIs do Node
são escritas de tal forma que suportam callbacks.
Por exemplo, uma função para ler um arquivo pode iniciar a leitura de um arquivo e retornar o controle ao ambiente
de execução imediatamente para que a próxima instrução possa ser executada. Quando a E/S do arquivo estiver
concluída, ele chamará a função de retorno de chamada enquanto passa a função de retorno de chamada, o
conteúdo do arquivo como parâmetro. Portanto, não há bloqueio ou espera por E/S de arquivo. Isso torna o [Link]
altamente escalável, pois pode processar um grande número de solicitações sem esperar que nenhuma função
retorne resultados.
var fs = require("fs");
[Link]([Link]());
[Link]("Programa Finalizado");
$ nó [Link]
Verifique a saída.
Programa encerrado
21
Machine Translated by Google
[Link]
var fs = require("fs");
[Link]("Programa Finalizado");
$ nó [Link]
Verifique a saída.
Programa encerrado
• O primeiro exemplo mostra que o programa bloqueia até ler o arquivo e só então prossegue para
finalizar o programa.
• O segundo exemplo mostra que o programa não espera a leitura do arquivo e passa a imprimir
"Program Ended" e ao mesmo tempo, o programa sem bloqueio continua lendo o arquivo.
Assim, um programa de bloqueio executa muito em sequência. Do ponto de vista da programação, é mais
fácil implementar a lógica, mas os programas não bloqueantes não são executados em sequência. Caso
um programa precise utilizar algum dado para ser processado, deve-se mantê-lo dentro do mesmo bloco
para que seja executado sequencialmente.
22
Machine Translated by Google
[Link]
7. Ciclo de Eventos
O [Link] é um aplicativo de thread único, mas pode oferecer suporte à simultaneidade por meio do conceito
de evento e retornos de chamada. Cada API do [Link] é assíncrona e de thread único, elas usam chamadas
de função assíncronas para manter a simultaneidade. O nó usa o padrão observador.
O thread do nó mantém um loop de eventos e sempre que uma tarefa é concluída, ele dispara o evento
correspondente que sinaliza a execução da função ouvinte de eventos.
O [Link] usa eventos muito e é também uma das razões pelas quais o [Link] é bastante rápido em
comparação com outras tecnologias semelhantes. Assim que o Node inicia seu servidor, ele simplesmente
inicia suas variáveis, declara funções e então simplesmente espera que o evento ocorra.
Em um aplicativo orientado a eventos, geralmente há um loop principal que escuta eventos e, em seguida,
aciona uma função de retorno de chamada quando um desses eventos é detectado.
Embora os eventos pareçam bastante semelhantes aos retornos de chamada, a diferença está no fato de que
as funções de retorno de chamada são chamadas quando uma função assíncrona retorna seu resultado,
enquanto a manipulação de eventos funciona no padrão observador. As funções que escutam os eventos
atuam como Observadores. Sempre que um evento é acionado, sua função de ouvinte começa a ser
executada. O [Link] tem vários eventos integrados disponíveis por meio do módulo de eventos e da classe
EventEmitter que são usados para vincular eventos e ouvintes de eventos da seguinte forma:
23
Machine Translated by Google
[Link]
[Link]('eventName', eventHandler);
// Dispara um evento
[Link]('eventName');
Exemplo
Crie um arquivo js chamado [Link] com o seguinte código:
[Link]('data_received');
[Link]('conexão', connectHandler);
[Link]('data_received', function(){
});
[Link]('conexão');
24
Machine Translated by Google
[Link]
[Link]("Programa Finalizado.");
$ mnode [Link]
conexão bem-sucedida.
Programa encerrado.
var fs = require("fs");
se (erro){
[Link]([Link]);
Retorna;
[Link]([Link]());
});
[Link]("Programa Finalizado");
Aqui [Link]() é uma função assíncrona cujo propósito é ler um arquivo. Se ocorrer um erro durante a
operação de leitura, o objeto err conterá o erro correspondente, caso contrário, os dados conterão o conteúdo
do arquivo. readFile passa err e dados para a função de retorno de chamada após a conclusão da operação
de leitura, que finalmente imprime o conteúdo.
Programa encerrado
25
Machine Translated by Google
[Link]
8. Emissor de Eventos
Muitos objetos em um Node emitem eventos, por exemplo, um [Link] emite um evento cada vez que um peer se
conecta a ele, um [Link] emite um evento quando o arquivo é aberto. Todos os objetos que emitem eventos são
as instâncias de [Link].
Como vimos na seção anterior, a classe EventEmitter está no módulo de eventos. É acessível através do seguinte código:
Quando uma instância de EventEmitter enfrenta algum erro, ela emite um evento de 'erro'. Quando um novo ouvinte é
adicionado, o evento 'newListener' é acionado e quando um ouvinte é removido, o evento 'removeListener' é acionado.
EventEmitter fornece várias propriedades como on e emit. on é usado para vincular uma função ao evento e emit é
usado para disparar um evento.
Métodos
addListener(evento, ouvinte)
Adiciona um ouvinte no final da matriz de ouvintes para o evento especificado. Nenhuma verificação
1 é feita para ver se o ouvinte já foi adicionado. Várias chamadas passando a mesma combinação de
evento e ouvinte resultarão na adição do ouvinte várias vezes. Retorna o emissor, para que as
chamadas possam ser encadeadas.
on(evento, ouvinte)
Adiciona um ouvinte no final da matriz de ouvintes para o evento especificado. Nenhuma verificação
2 é feita para ver se o ouvinte já foi adicionado. Várias chamadas passando a mesma combinação de
evento e ouvinte resultarão na adição do ouvinte várias vezes. Retorna o emissor, para que as
chamadas possam ser encadeadas.
Adiciona um ouvinte único ao evento. Este ouvinte é invocado apenas na próxima vez que o evento for
acionado, após o que será removido. Retorna o emissor, para que as chamadas possam ser encadeadas.
3
26
Machine Translated by Google
[Link]
removeListener(evento, ouvinte)
Remove um ouvinte da matriz de ouvintes para o evento especificado. Cuidado: Ele altera os
índices de matriz na matriz de ouvintes atrás do ouvinte. removeListener removerá, no
4 máximo, uma instância de um ouvinte da matriz de ouvintes. Se um único ouvinte tiver sido
adicionado várias vezes à matriz de ouvintes para o evento especificado, removeListener
deverá ser chamado várias vezes para remover cada instância. Retorna o emissor, para que
as chamadas possam ser encadeadas.
removeAllListeners([evento])
Remove todos os ouvintes ou os do evento especificado. Não é uma boa idéia remover ouvintes
5 que foram adicionados em outro lugar no código, especialmente quando está em um emissor
que você não criou (por exemplo, soquetes ou fluxos de arquivos). Retorna o emissor, para que
as chamadas possam ser encadeadas.
setMaxListeners(n)
Por padrão, EventEmitters imprimirá um aviso se mais de 10 ouvintes forem adicionados a
6
um determinado evento. Este é um padrão útil que ajuda a encontrar vazamentos de memória.
Obviamente nem todos os emissores devem ser limitados a 10. Esta função permite que isso
seja aumentado. Defina como zero para ilimitado.
ouvintes (evento)
7
Retorna uma matriz de ouvintes para o evento especificado.
Métodos de classe
1 listenerCount(emissor, evento)
Retorna o número de ouvintes para um determinado evento.
27
Machine Translated by Google
[Link]
Eventos
novoOuvinte
Este evento é emitido sempre que um ouvinte é adicionado. Quando este evento é acionado, o ouvinte
removeListener
Este evento é emitido sempre que alguém remove um ouvinte. Quando este evento é acionado, o ouvinte
Exemplo
Crie um arquivo js chamado [Link] com o seguinte código [Link]:
// ouvinte #1
[Link]('listner1 executado.');
// ouvinte #2
[Link]('listner2 executado.');
28
Machine Translated by Google
[Link]
[Link]('conexão', listner1);
[Link]('conexão', listner2);
var eventListeners =
require('events').[Link](eventEmitter,'connection');
[Link]('conexão');
[Link]('conexão', listner1);
[Link]('conexão');
eventListeners =
require('eventos').[Link](eventEmitter,'connection');
[Link]("Programa Finalizado.");
$ nó [Link]
Verifique a saída.
listner1 executado.
listner2 executado.
listner2 executado.
Programa encerrado.
29
Machine Translated by Google
9. Tampões [Link]
O JavaScript puro é amigável para Unicode, mas não é assim para dados binários. Ao lidar com fluxos TCP
ou o sistema de arquivos, é necessário lidar com fluxos de octetos. Node fornece a classe Buffer que
fornece instâncias para armazenar dados brutos semelhantes a uma matriz de inteiros, mas corresponde a
uma alocação de memória bruta fora do heap V8.
A classe de buffer é uma classe global que pode ser acessada em um aplicativo sem importar o módulo de
buffer.
Criando buffers
Node Buffer pode ser construído de várias maneiras.
Método 1
A seguir está a sintaxe para criar um buffer não iniciado de 10 octetos:
Método 2
A seguir está a sintaxe para criar um Buffer de um determinado array:
Método 3
A seguir está a sintaxe para criar um Buffer de uma determinada string e opcionalmente tipo de codificação:
Embora "utf8" seja a codificação padrão, você pode usar qualquer uma das seguintes codificações "ascii",
"utf8", "utf16le", "ucs2", "base64" ou "hex".
Escrevendo em buffers
Sintaxe
A seguir está a sintaxe do método para gravar em um buffer de nó:
30
Machine Translated by Google
[Link]
Parâmetros
Valor de retorno
Este método retorna o número de octetos gravados. Se não houver espaço suficiente no buffer para caber na
string inteira, ele gravará uma parte da string.
Exemplo
Octetos escritos: 20
Leitura de buffers
Sintaxe
A seguir está a sintaxe do método para ler dados de um Node Buffer:
Parâmetros
Valor de retorno
Este método decodifica e retorna uma string de dados de buffer codificados usando a codificação do conjunto
de caracteres especificado.
31
Machine Translated by Google
[Link]
Exemplo
[Link]([Link]('ascii'));
// saídas: abcdefghijklmnopqrstuvwxyz
[Link]( [Link]('ascii',0,5));
// saídas: abcde
[Link]([Link]('utf8',0,5));
// saídas: abcde
[Link]([Link](undefined,0,5));
// codificação padrão para 'utf8', saídas abcde
aBCDeFGHIJKLMNopqRSTUVWxyZ
abcde
abcde
abcde
Sintaxe
A seguir está a sintaxe do método para converter um Node Buffer em objeto JSON:
[Link]()
Valor de retorno
Exemplo
[Link](json);
[Link]
[83, 105, 109, 112, 108, 121, 32, 69, 97, 115, 121, 32, 76, 101, 97, 114, 110, 105, 110, 103]
Concatenar buffers
Sintaxe
A seguir está a sintaxe do método para concatenar buffers de nó em um único buffer de nó:
[Link](list[, totalLength])
Parâmetros
Valor de retorno
Exemplo
Comparar buffers
Sintaxe
[Link](otherBuffer);
Parâmetros
33
Machine Translated by Google
[Link]
Valor de retorno
Retorna um número indicando se vem antes ou depois ou é igual ao otherBuffer na ordem de classificação.
Exemplo
if(resultado < 0) {
}senão {
Copiar buffer
Sintaxe
A seguir está a sintaxe do método para copiar um buffer de nó:
Parâmetros
34
Machine Translated by Google
[Link]
Valor de retorno
Sem valor de retorno. Copia dados de uma região desse buffer para uma região no buffer de destino,
mesmo que a região de memória de destino se sobreponha à origem. Se indefinido, os parâmetros
targetStart e sourceStart são padronizados para 0, enquanto sourceEnd é padronizado como [Link].
Exemplo
//copia um buffer
[Link](buffer2);
"
[Link]("buffer2 content: + [Link]());
Buffer de fatia
Sintaxe
[Link]([início][, fim])
Parâmetros
Valor de retorno
Retorna um novo buffer que faz referência à mesma memória que o antigo, mas deslocado e cortado pelos
índices inicial (o padrão é 0) e final (o padrão é [Link]). Os índices negativos começam no final do buffer.
Exemplo
//cortando um buffer
35
Machine Translated by Google
[Link]
Comprimento do buffer
Sintaxe
A seguir está a sintaxe do método para obter o tamanho de um buffer de nó em bytes:
[Link];
Valor de retorno
Exemplo
//comprimento do buffer
comprimento do buffer: 14
Referência de métodos
Segue uma referência do módulo Buffers disponível em [Link]. Para mais detalhes, você pode consultar a
documentação oficial.
[Link]
Retorna o tamanho do buffer em bytes. Observe que isso não é necessariamente o tamanho
4 do conteúdo. length refere-se à quantidade de memória alocada para o objeto de buffer. Ele
não muda quando o conteúdo do buffer é alterado.
36
Machine Translated by Google
[Link]
[Link]()
15 Retorna uma representação JSON da instância Buffer. [Link] chama essa função
implicitamente ao stringificar uma instância de Buffer.
37
Machine Translated by Google
[Link]
buf[índice]
16 Obtenha e defina o octeto em index. Os valores referem-se a bytes individuais, portanto,
o intervalo legal é entre 0x00 e 0xFF hex ou 0 e 255.
17 [Link](otherBuffer)
Retorna um booleano se este buffer e otherBuffer tiverem os mesmos bytes.
[Link](otherBuffer)
18 Retorna um número indicando se esse buffer vem antes ou depois ou é igual ao otherBuffer
na ordem de classificação.
[Link]([início][, fim])
20 Retorna um novo buffer que faz referência à mesma memória que o antigo, mas
deslocado e cortado pelos índices inicial (o padrão é 0) e final (o padrão é [Link]).
Os índices negativos começam no final do buffer.
buf.readUInt8(offset[, noAssert])
21 Lê um inteiro de 8 bits sem sinal do buffer no deslocamento especificado. Defina noAssert
como true para ignorar a validação do deslocamento. Isso significa que o deslocamento
pode estar além do final do buffer. O padrão é falso.
buf.readUInt16LE(offset[, noAssert])
22 Lê um inteiro de 16 bits sem sinal do buffer no deslocamento especificado com o formato
endian especificado. Defina noAssert como true para ignorar a validação do deslocamento.
Isso significa que o deslocamento pode estar além do final do buffer. O padrão é falso.
buf.readUInt16BE(offset[, noAssert])
23 Lê um inteiro de 16 bits sem sinal do buffer no deslocamento especificado com o formato
endian especificado. Defina noAssert como true para ignorar a validação do deslocamento.
Isso significa que o deslocamento pode estar além do final do buffer. O padrão é falso.
buf.readUInt32LE(offset[, noAssert])
24 Lê um inteiro de 32 bits sem sinal do buffer no deslocamento especificado com o formato
endian especificado. Defina noAssert como true para ignorar a validação do deslocamento.
Isso significa que o deslocamento pode estar além do final do buffer. O padrão é falso.
buf.readUInt32BE(offset[, noAssert])
25 Lê um inteiro de 32 bits sem sinal do buffer no deslocamento especificado com o formato
endian especificado. Defina noAssert como true para ignorar a validação do deslocamento.
Isso significa que o deslocamento pode estar além do final do buffer. O padrão é falso.
buf.readInt8(offset[, noAssert])
26 Lê um inteiro de 8 bits com sinal do buffer no deslocamento especificado. Defina
noAssert como true para ignorar a validação do deslocamento. Isso significa que o
deslocamento pode estar além do final do buffer. O padrão é falso.
27 buf.readInt16LE(offset[, noAssert])
Lê um inteiro de 16 bits com sinal do buffer no deslocamento especificado com o
38
Machine Translated by Google
[Link]
formato endian especificado. Defina noAssert como true para ignorar a validação do deslocamento. Isto
significa que o deslocamento pode estar além do final do buffer. O padrão é falso.
buf.readInt16BE(offset[, noAssert])
28 Lê um inteiro de 16 bits com sinal do buffer no deslocamento especificado com o formato
endian especificado. Defina noAssert como true para ignorar a validação do deslocamento. Isto
significa que o deslocamento pode estar além do final do buffer. O padrão é falso.
buf.readInt32LE(offset[, noAssert])
29 Lê um inteiro de 32 bits com sinal do buffer no deslocamento especificado com o formato
endian especificado. Defina noAssert como true para ignorar a validação do deslocamento. Isto
significa que o deslocamento pode estar além do final do buffer. O padrão é falso.
buf.readInt32BE(offset[, noAssert])
30 Lê um inteiro de 32 bits com sinal do buffer no deslocamento especificado com o formato
endian especificado. Defina noAssert como true para ignorar a validação do deslocamento. Isto
significa que o deslocamento pode estar além do final do buffer. O padrão é falso.
[Link](offset[, noAssert])
31 Lê um float de 32 bits do buffer no deslocamento especificado com o formato endian
especificado. Defina noAssert como true para ignorar a validação do deslocamento. Significa o
deslocamento pode estar além do final do buffer. O padrão é falso.
[Link](offset[, noAssert])
32 Lê um float de 32 bits do buffer no deslocamento especificado com o formato endian
especificado. Defina noAssert como true para ignorar a validação do deslocamento. Significa o
deslocamento pode estar além do final do buffer. O padrão é falso.
[Link](offset[, noAssert])
33 Lê um duplo de 64 bits do buffer no deslocamento especificado com o formato
endian especificado. Defina noAssert como true para ignorar a validação do deslocamento. Isto
significa que o deslocamento pode estar além do final do buffer. O padrão é falso.
[Link](offset[, noAssert])
34 Lê um duplo de 64 bits do buffer no deslocamento especificado com o formato
endian especificado. Defina noAssert como true para ignorar a validação do deslocamento. Isto
significa que o deslocamento pode estar além do final do buffer. O padrão é falso.
39
Machine Translated by Google
[Link]
formato. Observe que o valor deve ser um inteiro de 16 bits sem sinal válido. Defina
noAssert como true para ignorar a validação de valor e deslocamento. Isso significa que
o valor pode ser muito grande para a função específica e o deslocamento pode estar além
do final do buffer, fazendo com que os valores sejam eliminados silenciosamente. Não
deve ser usado a menos que você tenha certeza de sua exatidão. O padrão é falso.
40
Machine Translated by Google
[Link]
formato. Observe que o valor deve ser um inteiro de 32 bits com sinal válido. Defina
noAssert como true para ignorar a validação de valor e deslocamento. Isso significa que
o valor pode ser muito grande para a função específica e o deslocamento pode estar além
do final do buffer, fazendo com que os valores sejam eliminados silenciosamente. Não deve
ser usado a menos que você tenha certeza de sua exatidão. O padrão é falso.
Métodos de classe
1 [Link](codificação)
Retorna true se a codificação for um argumento de codificação válido, false caso contrário.
2 [Link](obj)
Testa se obj é um Buffer.
41
Machine Translated by Google
[Link]
3 [Link](string[, codificação])
Fornece o comprimento real de bytes de uma string. codificação padrão para 'utf8'. Não é o mesmo
que [Link], pois [Link] retorna o número de caracteres em uma
string.
4 [Link](list[, totalLength])
Retorna um buffer que é o resultado da concatenação de todos os buffers da lista.
5 [Link](buf1, buf2)
O mesmo que [Link](buf2). Útil para classificar uma matriz de buffers.
42
Machine Translated by Google
Streams são objetos que permitem ler dados de uma origem ou gravar dados em um destino de maneira contínua. No
[Link], existem quatro tipos de streams:
• Duplex - Stream que pode ser usado para operação de leitura e gravação.
Cada tipo de Stream é uma instância EventEmitter e lança vários eventos em diferentes instâncias de tempos. Por exemplo,
alguns dos eventos comumente usados são:
• end - Este evento é acionado quando não há mais dados para ler.
• error - Este evento é acionado quando ocorre algum erro ao receber ou gravar dados.
• Finish - Este evento é acionado quando todos os dados são liberados para o sistema subjacente.
Este tutorial fornece uma compreensão básica das operações comumente usadas no Streams.
Lendo de um stream
Crie um arquivo de texto chamado [Link] com o seguinte conteúdo:
var fs = require("fs");
43
Machine Translated by Google
[Link]
[Link]('UTF8');
[Link]('data', function(chunk) {
dados += pedaço;
});
[Link]('end',function(){
[Link](dados);
});
[Link]('error', function(err){
[Link]([Link]);
});
[Link]("Programa Finalizado");
$ nó [Link]
Verifique a saída.
Programa encerrado
Gravando em um fluxo
Crie um arquivo js chamado [Link] com o seguinte código:
var fs = require("fs");
[Link](data,'UTF8');
44
Machine Translated by Google
[Link]
[Link]();
[Link]('finish', function() {
[Link]("Gravação concluída.");
});
[Link]('error', function(err){
[Link]([Link]);
});
[Link]("Programa Finalizado");
$ nó [Link]
Verifique a saída.
Programa encerrado
Escrita concluída.
Agora abra [Link] criado em seu diretório atual; deve conter o seguinte:
Canalizando os córregos
A tubulação é um mecanismo onde fornecemos a saída de um fluxo como entrada para outro fluxo. Normalmente é usado
para obter dados de um fluxo e passar a saída desse fluxo para outro fluxo. Não há limite nas operações de tubulação.
Agora vamos mostrar um exemplo de tubulação para ler de um arquivo e gravá-lo em outro arquivo.
var fs = require("fs");
45
Machine Translated by Google
[Link]
[Link](writerStream);
[Link]("Programa Finalizado");
$ nó [Link]
Verifique a saída.
Programa encerrado
Encadeando os fluxos
O encadeamento é um mecanismo para conectar a saída de um fluxo a outro fluxo e criar uma cadeia de várias
operações de fluxo. É normalmente usado com operações de tubulação. Agora usaremos tubulação e encadeamento
para primeiro compactar um arquivo e depois descompactá-lo.
var fs = require("fs");
[Link]('[Link]')
.pipe([Link]())
.pipe([Link]('[Link]'));
[Link]("Arquivo compactado.");
$ nó [Link]
Verifique a saída.
46
Machine Translated by Google
[Link]
Arquivo compactado.
Você descobrirá que [Link] foi compactado e criou um arquivo [Link] no diretório atual. Agora vamos
tentar descompactar o mesmo arquivo usando o seguinte código:
var fs = require("fs");
var zlib = require('zlib');
[Link]("Arquivo descompactado.");
$ nó [Link]
Verifique a saída.
Arquivo descompactado.
47
Machine Translated by Google
[Link]
11. Sistema de arquivos
O Node implementa E/S de arquivo usando wrappers simples em torno de funções POSIX padrão. O módulo Node File
System (fs) pode ser importado usando a seguinte sintaxe:
ar fs = require("fs")
Síncrono vs Assíncrono
Cada método no módulo fs tem formulários síncronos e assíncronos.
Os métodos assíncronos usam o último parâmetro como o retorno de chamada da função de conclusão e o primeiro
parâmetro da função de retorno de chamada como erro. É melhor usar um método assíncrono em vez de um método
síncrono, pois o primeiro nunca bloqueia um programa durante sua execução, enquanto o segundo o faz.
Exemplo
Crie um arquivo de texto chamado [Link] com o seguinte conteúdo:
var fs = require("fs");
// Leitura assíncrona
se (erro) {
return [Link](err);
});
// Leitura síncrona
[Link]("Programa Finalizado");
48
Machine Translated by Google
[Link]
$ nó [Link]
Verifique a saída.
Programa encerrado
As seções a seguir neste capítulo fornecem um conjunto de bons exemplos sobre os principais métodos de E/S
de arquivo.
Abra um arquivo
Sintaxe
A seguir está a sintaxe do método para abrir um arquivo no modo assíncrono:
Parâmetros
Segue a descrição dos parâmetros utilizados:
• flags - Flags indicam o comportamento do arquivo a ser aberto. Todos os valores possíveis foram
mencionados abaixo.
• mode - Configura o modo do arquivo (permissão e bits fixos), mas somente se o arquivo foi criado. O
padrão é 0666, legível e gravável.
• callback - Esta é a função de callback que recebe dois argumentos (err, fd).
Bandeiras
Bandeira Descrição
r Abra o arquivo para leitura. Ocorre uma exceção se o arquivo não existir.
r+ Arquivo aberto para leitura e escrita. Ocorre uma exceção se o arquivo não existir.
49
Machine Translated by Google
[Link]
Abra o arquivo para leitura e escrita, solicitando ao SO para abri-lo de forma síncrona. Veja as
rs+
notas para 'rs' sobre como usar isso com cuidado.
Abra o arquivo para escrita. O arquivo é criado (se não existir) ou truncado (se existir).
dentro
Arquivo aberto para leitura e escrita. O arquivo é criado (se não existir) ou truncado (se existir).
em +
uma
Abra o arquivo para anexar. O arquivo é criado se não existir.
machado
Como 'a', mas falha se o caminho existir.
Exemplo
Vamos criar um arquivo js chamado [Link] com o seguinte código para abrir um arquivo [Link] para
leitura e escrita.
var fs = require("fs");
$ nó [Link]
50
Machine Translated by Google
[Link]
Verifique a saída.
Sintaxe
A seguir está a sintaxe do método para obter as informações sobre um arquivo:
Parâmetros
Segue a descrição dos parâmetros utilizados:
• callback - Esta é a função callback que recebe dois argumentos (err, stats) onde stats é um objeto
do tipo [Link] que é mostrado abaixo no exemplo.
Além dos atributos importantes que estão impressos abaixo no exemplo, existem vários métodos úteis
disponíveis na classe [Link] que podem ser usados para verificar o tipo de arquivo.
Esses métodos são fornecidos na tabela a seguir.
Método Descrição
51
Machine Translated by Google
[Link]
Exemplo
Vamos criar um arquivo js chamado [Link] com o seguinte código:
var fs = require("fs");
se (erro) {
return [Link](err);
[Link](stats);
});
$ nó [Link]
Verifique a saída.
{ desenvolvimento: 1792,
modo: 33188,
link: 1,
uid: 48,
gid: 48,
rdv: 0,
ino: 4318127,
tamanho: 97,
blocos: 8,
52
Machine Translated by Google
[Link]
isFile ? verdadeiro
isDirectory ? falso
Escrevendo um arquivo
Sintaxe
A seguir está a sintaxe de um dos métodos para gravar em um arquivo:
Este método substituirá o arquivo se o arquivo já existir. Se você deseja gravar em um arquivo existente,
deve usar outro método disponível.
Parâmetros
Segue a descrição dos parâmetros utilizados:
• retorno de chamada - Esta é a função de retorno de chamada que obtém um único parâmetro err que
retorna um erro em caso de qualquer erro de escrita.
Exemplo
Vamos criar um arquivo js chamado [Link] com o seguinte código:
var fs = require("fs");
[Link]
});
});
$ nó [Link]
Verifique a saída.
Lendo um arquivo
Sintaxe
A seguir está a sintaxe de um dos métodos para ler de um arquivo:
Este método usará o descritor de arquivo para ler o arquivo. Se você deseja ler o arquivo diretamente usando o nome do
arquivo, deve usar outro método disponível.
Parâmetros
• comprimento - Este é um número inteiro que especifica o número de bytes a serem lidos.
• position - Este é um número inteiro que especifica de onde começar a leitura no arquivo. Se a posição for nula, os
dados serão lidos da posição atual do arquivo.
• retorno de chamada - Esta é a função de retorno de chamada que obtém os três argumentos (err,
bytesRead, buffer).
Exemplo
Vamos criar um arquivo js chamado [Link] com o seguinte código:
54
Machine Translated by Google
[Link]
var fs = require("fs");
var buff = new Buffer (1024);
$ nó [Link]
Verifique a saída.
55
Machine Translated by Google
[Link]
Arquivo de Fechamento
Sintaxe
A seguir está a sintaxe para fechar um arquivo aberto:
Parâmetros
Segue a descrição dos parâmetros utilizados:
• retorno de chamada - Esta é a função de retorno de chamada. Nenhum argumento além de um possível
exceção são dadas ao retorno de chamada de conclusão.
Exemplo
Vamos criar um arquivo js chamado [Link] com o seguinte código:
var fs = require("fs");
var buff = new Buffer (1024);
56
Machine Translated by Google
[Link]
[Link](fd, function(err){
se (erro){
[Link](erro);
}
[Link]("Arquivo fechado com sucesso.");
});
});
});
$ nó [Link]
Verifique a saída.
Truncar um arquivo
Sintaxe
A seguir está a sintaxe do método para truncar um arquivo aberto:
Parâmetros
Segue a descrição dos parâmetros utilizados:
• retorno de chamada - Esta é a função de retorno de chamada. Nenhum argumento além de um possível
exceção são dadas ao retorno de chamada de conclusão.
57
Machine Translated by Google
[Link]
Exemplo
Vamos criar um arquivo js chamado [Link] com o seguinte código:
var fs = require("fs");
var buff = new Buffer (1024);
58
Machine Translated by Google
[Link]
});
});
});
});
$ nó [Link]
Verifique a saída.
Excluir um arquivo
Sintaxe
A seguir está a sintaxe do método para excluir um arquivo:
Parâmetros
Segue a descrição dos parâmetros utilizados:
• retorno de chamada - Esta é a função de retorno de chamada. Nenhum argumento além de um possível
exceção são dadas ao retorno de chamada de conclusão.
Exemplo
Vamos criar um arquivo js chamado [Link] com o seguinte código:
var fs = require("fs");
[Link]
return [Link](err);
}
[Link]("Arquivo deletado com sucesso!");
});
$ nó [Link]
Verifique a saída.
Criar um diretório
Sintaxe
A seguir está a sintaxe do método para criar um diretório:
Parâmetros
Segue a descrição dos parâmetros utilizados:
• retorno de chamada - Esta é a função de retorno de chamada. Nenhum argumento além de um possível
exceção são dadas ao retorno de chamada de conclusão.
Exemplo
Vamos criar um arquivo js chamado [Link] com o seguinte código:
var fs = require("fs");
60
Machine Translated by Google
[Link]
});
$ nó [Link]
Verifique a saída.
Ler um diretório
Sintaxe
A seguir está a sintaxe do método para ler um diretório:
Parâmetros
Segue a descrição dos parâmetros utilizados:
• callback - Esta é a função callback que obtém dois argumentos (err, files) onde files é um array dos
nomes dos arquivos no diretório excluindo '.' e '..'.
Exemplo
Vamos criar um arquivo js chamado [Link] com o seguinte código:
var fs = require("fs");
61
Machine Translated by Google
[Link]
$ nó [Link]
Verifique a saída.
[Link]
funcioná[Link]
hsperfdata_apache
teste
[Link]
Remover um diretório
Sintaxe
A seguir está a sintaxe do método para remover um diretório:
Parâmetros
Segue a descrição dos parâmetros utilizados:
• retorno de chamada - Esta é a função de retorno de chamada. Nenhum argumento além de um possível
exceção são dadas ao retorno de chamada de conclusão.
Exemplo
Vamos criar um arquivo js chamado [Link] com o seguinte código:
var fs = require("fs");
[Link]("/tmp/teste",function(err){
se (erro) {
return [Link](err);
[Link]("/tmp/",function(err, arquivos){
se (erro) {
return [Link](err);
62
Machine Translated by Google
[Link]
[Link]( arquivo );
});
});
});
$ nó [Link]
Verifique a saída.
[Link]
funcioná[Link]
hsperfdata_apache
[Link]
Referência de métodos
A seguir está uma referência do módulo File System disponível em [Link]. Para mais detalhes, você pode
consultar a documentação oficial.
3 [Link](fd, len)
Fruncate síncrono().
5 [Link](caminho, len)
Truncamento síncrono().
63
Machine Translated by Google
[Link]
13 [Link](caminho, modo)
chmod síncrono().
15 [Link](fd, modo)
fchmod() síncrono.
17 [Link](caminho, modo)
lchmod() síncrono.
19 Assíncrono lstat(). O retorno de chamada recebe dois argumentos (err, stats) onde stats é
um objeto [Link]. lstat() é idêntico a stat(), exceto que se path for um link simbólico, então o link
em si é stat-ed, não o arquivo ao qual ele se refere.
20 fstat assíncrono(). O retorno de chamada recebe dois argumentos (err, stats) onde stats é
um objeto [Link]. fstat() é idêntico a stat(), exceto que o arquivo a ser stat-ed é especificado
pelo descritor de arquivo fd.
21 [Link](caminho)
Estatística síncrona(). Retorna uma instância de [Link].
64
Machine Translated by Google
[Link]
22 [Link](caminho)
lstat síncrono(). Retorna uma instância de [Link].
23 [Link](fd)
fstat síncrono(). Retorna uma instância de [Link].
25 [Link](srcpath, dstpath)
Link síncrono().
30 [Link](caminho[, cache])
caminho real síncrono(). Retorna o caminho resolvido.
32 [Link](caminho)
Desvinculação síncrona().
34 [Link](caminho)
rmdir síncrono().
65
Machine Translated by Google
[Link]
36 [Link](caminho[, modo])
mkdir síncrono().
38 [Link](caminho)
readdir síncrono(). Retorna uma matriz de nomes de arquivos excluindo '.' e '..'.
40 [Link](fd)
Fechamento síncrono().
48 [Link](fd)
Fsync síncrono.
66
Machine Translated by Google
[Link]
65 [Link](caminho)
Versão síncrona de [Link].
[Link](caminho[, modo])
67 Versão síncrona do [Link]. Ele é acionado se alguma verificação de acessibilidade falhar e não
faz nada de outra forma.
67
Machine Translated by Google
[Link]
68 [Link](caminho[, opções])
Retorna um novo objeto ReadStream.
69 [Link](caminho[, opções])
Retorna um novo objeto WriteStream.
68
Machine Translated by Google
Os objetos globais do [Link] são globais por natureza e estão disponíveis em todos os módulos. Não
precisamos incluir esses objetos em nosso aplicativo, mas podemos usá-los diretamente. Esses objetos
são módulos, funções, strings e o próprio objeto conforme explicado abaixo.
__nome do arquivo
O __filename representa o nome do arquivo do código que está sendo executado. Este é o caminho
absoluto resolvido deste arquivo de código. Para um programa principal, não é necessariamente o mesmo
nome de arquivo usado na linha de comando. O valor dentro de um módulo é o caminho para esse arquivo
de módulo.
Exemplo
Crie um arquivo js chamado [Link] com o seguinte código:
[Link]( __filename );
$ nó [Link]
Com base na localização do seu programa, ele imprimirá o nome do arquivo principal da seguinte forma:
/web/com/1427091028_21099/[Link]
__dirname
O __dirname representa o nome do diretório no qual o script atualmente em execução reside.
Exemplo
Crie um arquivo js chamado [Link] com o seguinte código:
[Link]( __dirname );
$ nó [Link]
69
Machine Translated by Google
[Link]
Com base na localização do seu programa, ele imprimirá o nome do diretório atual da seguinte maneira:
/web/com/1427091028_21099
setTimeout(cb, ms)
A função global setTimeout(cb, ms) é usada para executar o retorno de chamada cb após pelo menos ms
milissegundos. O atraso real depende de fatores externos, como granularidade do temporizador do sistema
operacional e carga do sistema. Um temporizador não pode abranger mais de 24,8 dias.
Esta função retorna um valor opaco que representa o timer que pode ser usado para limpar o timer.
Exemplo
Crie um arquivo js chamado [Link] com o seguinte código:
função imprimirOlá(){
[Link]("Olá, Mundo!");
setTimeout(printHello, 2000);
$ nó [Link]
Olá Mundo!
clearTimeout(t)
A função global clearTimeout(t) é usada para parar um cronômetro que foi criado anteriormente com setTimeout(). Aqui t
é o temporizador retornado pela função setTimeout().
Exemplo
função imprimirOlá(){
[Link]("Olá, Mundo!");
70
Machine Translated by Google
[Link]
clearTimeout(t);
$ nó [Link]
setInterval(cb, ms)
A função global setInterval(cb, ms) é usada para executar o callback cb repetidamente após pelo menos
ms milissegundos. O atraso real depende de fatores externos, como granularidade do temporizador do
sistema operacional e carga do sistema. Um temporizador não pode abranger mais de 24,8 dias.
Esta função retorna um valor opaco que representa o timer que pode ser usado para limpar o timer usando a função
clearInterval(t).
Exemplo
Crie um arquivo js chamado [Link] com o seguinte código:
função imprimirOlá(){
[Link]("Olá, Mundo!");
setInterval(printHello, 2000);
$ nó [Link]
O programa acima executará printHello() a cada 2 segundos. Devido à limitação do sistema, este programa não pode ser
executado com a opção Experimente para que você possa verificá-lo em sua máquina localmente.
Objetos Globais
A tabela a seguir fornece uma lista de outros objetos que usamos com frequência em nossos aplicativos. Para mais
detalhes, você pode consultar a documentação oficial.
Console
1
Usado para imprimir informações sobre stdout e stderr.
71
Machine Translated by Google
[Link]
Processo
2 Usado para obter informações sobre o processo atual. Fornece vários eventos relacionados às
atividades do processo.
Objeto de console
O console [Link] é um objeto global e é usado para imprimir diferentes níveis de mensagens para stdout e stderr.
Existem métodos integrados a serem usados para imprimir mensagens informativas, de aviso e de erro.
É utilizado de forma síncrona quando o destino é um arquivo ou terminal e de forma assíncrona quando o destino é um
pipe.
Métodos de console
A seguir está uma lista de métodos disponíveis com o objeto global do console.
[Link]([dados][, ...])
1 Imprime para stdout com nova linha. Esta função pode receber vários argumentos de maneira
semelhante a printf().
[Link]([dados][, ...])
2 Imprime para stdout com nova linha. Esta função pode receber vários argumentos de maneira
semelhante a printf().
[Link]([dados][, ...])
3 Imprime em stderr com nova linha. Esta função pode receber vários argumentos de maneira
semelhante a printf().
[Link]([dados][, ...])
4 Imprime em stderr com nova linha. Esta função pode receber vários argumentos de maneira
semelhante a printf()
[Link](obj[, opções])
5
Usa [Link] em obj e imprime a string resultante em stdout.
[Link](rótulo)
6
Marque um horário.
[Link](rótulo)
7
Termine o cronômetro, grave a saída.
72
Machine Translated by Google
[Link]
[Link](message[, ...])
8 Imprima para stderr 'Trace :', seguido pela mensagem formatada e rastreamento de pilha para a
posição atual.
Exemplo
Vamos criar um arquivo js chamado [Link] com o seguinte código:
[Link]("Programa Iniciado");
[Link]("Obtendo dados");
//
//
[Link]('Obtendo dados');
[Link]("Programa Finalizado")
nó [Link]
Verifique a saída.
Programa iniciado
Contador: 10
Programa encerrado
73
Machine Translated by Google
[Link]
Objeto de processo
O objeto de processo é um objeto global e pode ser acessado de qualquer lugar. Existem vários métodos
disponíveis em um objeto de processo.
Eventos de Processo
saída
1 Emitido quando o processo está prestes a sair. Não há como impedir a saída do loop de
eventos neste ponto e, assim que todos os ouvintes de saída terminarem de ser executados,
o processo será encerrado.
antes de sair
Este evento é emitido quando o nó esvazia seu loop de eventos e não tem mais nada para
2 agendar. Normalmente, o nó sai quando não há trabalho agendado, mas um ouvinte para
'beforeExit' pode fazer chamadas assíncronas e fazer com que o nó continue.
4 Eventos de sinal
Emitido quando o processo recebe um sinal como SIGINT, SIGHUP, etc.
Exemplo
Crie um arquivo js chamado [Link] com o código a seguir para escutar o evento de saída :
[Link]('saída', function(código) {
$ nó [Link]
74
Machine Translated by Google
[Link]
Verifique a saída.
Programa encerrado
Códigos de saída
O nó normalmente sai com um código de status 0 quando não há mais operações assíncronas pendentes.
Existem outros códigos de saída descritos abaixo:
Não usado
2
reservado pelo Bash para uso indevido embutido.
Erro fatal
5 Houve um erro fatal irrecuperável no V8. Normalmente, uma mensagem será impressa em stderr com
o prefixo FATAL ERROR.
8 Não usado
Argumento inválido
9 Uma opção desconhecida foi especificada ou uma opção que requer um valor foi fornecida sem um valor.
75
Machine Translated by Google
[Link]
Saídas de sinal
Se o Node receber um sinal fatal como SIGKILL ou SIGHUP, seu código de saída será 128 mais o valor do
>128 código do sinal. Esta é uma prática padrão do Unix, uma vez que os códigos de saída são definidos como
inteiros de 7 bits e as saídas de sinal definem o bit de ordem superior e, em seguida, contêm o valor do
código de sinal.
Propriedades do processo
O processo fornece muitas propriedades úteis para obter melhor controle sobre as interações do sistema.
padrão
1
Um fluxo gravável para stdout.
stderr
2
Um fluxo gravável para stderr.
padrão
3
Um fluxo gravável para stdin.
argv
Uma matriz contendo os argumentos da linha de comando. O primeiro elemento será 'node', o segundo
4
elemento será o nome do arquivo JavaScript. Os próximos elementos serão quaisquer argumentos de linha
de comando adicionais.
execPath
5
Este é o caminho absoluto do executável que iniciou o processo.
execArgv
6 Este é o conjunto de opções de linha de comando específicas do nó do executável que iniciou o processo.
env
7
Um objeto que contém o ambiente do usuário.
código de saída
8 Um número que será o código de saída do processo, quando o processo sair normalmente ou sair via
[Link]() sem especificar um código.
versão
9
Uma propriedade compilada que expõe NODE_VERSION.
versões
10
Uma propriedade que expõe as strings de versão do nó e suas dependências.
configuração
Um objeto contendo a representação JavaScript das opções de configuração que foram usadas para
11
compilar o executável do nó atual. Este é o mesmo que o arquivo "[Link]" que foi produzido ao executar
o script ./configure.
76
Machine Translated by Google
[Link]
pid
12
O PID do processo.
título
13
Getter/setter para definir o que é exibido em 'ps'.
arco
14
Qual arquitetura de processador você está executando: 'arm', 'ia32' ou 'x64'.
plataforma
15
Qual plataforma você está executando: 'darwin', 'freebsd', 'linux', 'sunos' ou 'win32'
módulo principal
Maneira alternativa de recuperar [Link]. A diferença é que, se o módulo principal for alterado em
16 tempo de execução, [Link] ainda poderá se referir ao módulo principal original em módulos que
foram necessários antes da ocorrência da alteração. Geralmente é seguro assumir que os dois se referem
ao mesmo módulo.
Exemplo
Crie um arquivo js chamado [Link] com o seguinte código:
// Imprimindo no console
});
[Link]([Link]);
// Informações da plataforma
[Link]([Link]);
$ nó [Link]
77
Machine Translated by Google
[Link]
Olá Mundo!
0: nó
1: /web/com/1427106219_25089/[Link]
/usr/bin/node
linux
Referência de Métodos
O processo fornece muitos métodos úteis para obter melhor controle sobre as interações do sistema.
abortar()
1 Isso faz com que o nó emita um aborto. Isso faz com que o nó saia e gere um arquivo principal.
chdir (diretório)
2 Altera o diretório de trabalho atual do processo ou lança uma exceção se isso falhar.
3 cwd()
Retorna o diretório de trabalho atual do processo.
exit([código])
4 Finaliza o processo com o código especificado. Se omitido, exit usa o código de 'sucesso' 0.
getgid()
5 Obtém a identidade do grupo do processo. Este é o ID numérico do grupo, não o nome do grupo.
Esta função está disponível apenas em plataformas POSIX (ou seja, não Windows, Android).
setgid(id)
Define a identidade do grupo do processo (Veja setgid(2)). Ele aceita um ID numérico ou uma
6 string de nome de grupo. Se um nome de grupo for especificado, esse método será bloqueado
enquanto o resolve para um ID numérico. Esta função está disponível apenas em plataformas
POSIX (ou seja, não Windows, Android).
testemunha ()
7 Obtém a identidade do usuário do processo. Este é o id numérico, não o nome de usuário.
Esta função só está disponível em plataformas POSIX (ou seja, não Windows, Android).
setuid(id)
Define a identidade do usuário do processo (Veja setgid(2)). Ele aceita um ID numérico ou uma
8 string de nome de usuário. Se um nome de usuário for especificado, esse método será bloqueado
enquanto o resolve para um ID numérico. Esta função está disponível apenas em plataformas
POSIX (ou seja, não Windows, Android).
9 getgrupos()
Retorna uma matriz com os IDs de grupo suplementares. POSIX deixa não especificado
78
Machine Translated by Google
[Link]
se o ID do grupo efetivo for incluído, mas o [Link] garantirá que sempre seja. Esta função está disponível
apenas em plataformas POSIX (ou seja, não Windows, Android).
setgroups(grupos)
Define os IDs de grupo suplementares. Esta é uma operação privilegiada, o que implica que você precisa
10
estar na raiz ou ter o recurso CAP_SETGID. Esta função está disponível apenas em plataformas POSIX
(ou seja, não Windows, Android).
initgroups(usuário, extra_group)
Lê /etc/group e inicializa a lista de acesso do grupo, usando todos os grupos dos quais o usuário é
11 membro. Esta é uma operação privilegiada, o que implica que você precisa estar na raiz ou ter o recurso
CAP_SETGID. Esta função está disponível apenas em plataformas POSIX (ou seja, não Windows,
Android).
kill(pid[, sinal])
12 Envie um sinal para um processo. pid é o id do processo e signal é a string que descreve o sinal
a ser enviado. Os nomes dos sinais são strings como 'SIGINT' ou 'SIGHUP'. Se omitido, o sinal
será 'SIGTERM'.
uso de memória()
13 Retorna um objeto que descreve o uso de memória do processo Node medido em bytes.
nextTick(retorno de chamada)
14
Assim que o ciclo de eventos atual for concluído, chame a função de retorno de chamada.
umask([máscara])
Define ou lê a máscara de criação do modo de arquivo do processo. Os processos filho herdam a máscara
15
do processo pai. Retorna a máscara antiga se o argumento de máscara for fornecido, caso contrário,
retorna a máscara atual.
tempo de atividade()
16
Número de segundos que o Node está em execução.
hora ()
Retorna o tempo real atual de alta resolução em uma matriz de tuplas de [segundos, nanossegundos]. É
17 relativo a um tempo arbitrário no passado. Não está relacionado à hora do dia e, portanto, não está sujeito
ao desvio do relógio. O uso principal é para medir o desempenho entre intervalos.
Exemplo
Crie um arquivo js chamado [Link] com o seguinte código:
79
Machine Translated by Google
[Link]
[Link]([Link]());
$ nó [Link]
80
Machine Translated by Google
[Link]
13. Módulos Utilitários
Existem vários módulos utilitários disponíveis na biblioteca de módulos [Link]. Esses módulos são muito comuns e são
frequentemente usados durante o desenvolvimento de qualquer aplicativo baseado em Node.
1 OS Module
2 Módulo de caminho
3 Módulo de rede
4 Módulo DNS
Fornece funções para fazer pesquisa de DNS real, bem como para usar as funcionalidades de
5 Módulo de domínio
Fornece maneiras de lidar com várias operações de E/S diferentes como um único grupo.
OS Module
O módulo [Link] os fornece algumas funções utilitárias básicas relacionadas ao sistema operacional. Este módulo pode
ser importado usando a seguinte sintaxe.
var os = require("os")
Métodos
1 [Link]()
Retorna o diretório padrão do sistema operacional para arquivos temporários.
2 [Link]()
Retorna a endianidade da CPU. Os valores possíveis são "BE" ou "LE".
3 [Link]()
Retorna o nome do host do sistema operacional.
81
Machine Translated by Google
[Link]
4 [Link]()
Retorna o nome do sistema operacional.
5 [Link]()
Retorna a plataforma do sistema operacional.
6 [Link]()
Retorna a arquitetura de CPU do sistema operacional. Os valores possíveis são "x64", "arm" e
"ia32".
7 [Link]()
Retorna a versão do sistema operacional.
8 [Link]()
Retorna o tempo de atividade do sistema em segundos.
9 [Link]()
Retorna uma matriz contendo as médias de carga de 1, 5 e 15 minutos.
10 [Link]()
Retorna a quantidade total de memória do sistema em bytes.
11 [Link]()
Retorna a quantidade de memória livre do sistema em bytes.
12 [Link]()
Retorna uma matriz de objetos contendo informações sobre cada CPU/núcleo instalado: modelo,
velocidade (em MHz) e tempos (um objeto contendo o número de milissegundos que a CPU/
núcleo gastou em: user, nice, sys, idle e irq) .
13 [Link]()
Obtenha uma lista de interfaces de rede.
Propriedades
1 [Link]
Uma constante que define o marcador de fim de linha apropriado para o sistema operacional.
Exemplo
O exemplo a seguir demonstra alguns métodos de SO. Crie um arquivo js chamado [Link]
com o seguinte código.
var os = require("os");
// Endianidade
'
[Link]('endianness: + [Link]());
82
Machine Translated by Google
[Link]
// Tipo de SO
'
[Link]('type: + [Link]());
// plataforma do SO
'
[Link]('plataforma: + [Link]());
$ nó [Link]
Verifique a saída.
endianness: LE
tipo: Linux
plataforma: linux
Módulo de caminho
O módulo de caminho [Link] é usado para manipular e transformar caminhos de arquivo. Este módulo
pode ser importado usando a seguinte sintaxe.
Métodos
1 [Link](p)
Normalize um caminho de string, cuidando de '..' e '.' partes.
83
Machine Translated by Google
[Link]
[Link](caminho)
4 Determina se o caminho é um caminho absoluto. Um caminho absoluto sempre será resolvido
para o mesmo local, independentemente do diretório de trabalho.
5 [Link](de, para)
Resolva o caminho relativo de para até.
6 [Link](p)
Retorna o nome do diretório de um caminho. Semelhante ao comando Unix dirname .
7 [Link](p[, ext])
Retorna a última parte de um caminho. Semelhante ao comando Unix basename .
[Link](p)
8 Retorna a extensão do caminho, desde o último '.' para o final da string na última parte do caminho.
Se não há '.' na última parte do caminho ou o primeiro caractere dele é '.', então ele retorna uma
string vazia.
9 [Link](pathString)
Retorna um objeto de uma string de caminho.
10 [Link](pathObject)
Retorna uma string de caminho de um objeto, o oposto de [Link] acima.
Propriedades
1 [Link]
O separador de arquivos específico da plataforma. '\\' ou '/'.
2 [Link]
O delimitador de caminho específico da plataforma, ; ou ':'.
3 [Link]
Forneça acesso aos métodos de caminho mencionados, mas sempre interaja de maneira compatível
com posix.
4 caminho.win32
Forneça acesso aos métodos de caminho mencionados, mas sempre interaja de maneira compatível
com win32.
84
Machine Translated by Google
[Link]
Exemplo
Crie um arquivo js chamado [Link] com o seguinte código:
// Normalização
'
[Link]('normalization : [Link]('/ +
test/test1//2slashes/1slash/tab/..'));
// Junte-se
'
[Link]('caminho da junção: + [Link]('/teste', 'teste1', '2 barras/1 barra',
'tab', '..'));
// Resolve
'
[Link]('resolver: + [Link]('[Link]'));
// extName
'
[Link]('ext name: + [Link]('[Link]'));
$ nó [Link]
Verifique a saída.
normalização: /test/test1/2slashes/1slash
resolver: /web/com/1427176256_27423/[Link]
Módulo de rede
O módulo [Link] net é usado para criar servidores e clientes. Este módulo fornece um wrapper de rede assíncrono e
pode ser importado usando a seguinte sintaxe.
Métodos
85
Machine Translated by Google
[Link]
[Link]([opções][, connectionListener])
1 Cria um novo servidor TCP. O argumento connectionListener é definido automaticamente
como um ouvinte para o evento 'connection'.
[Link](opções[, connectionListener])
2 Um método de fábrica, que retorna um novo '[Link]' e se conecta ao endereço e porta
fornecidos.
[Link](options[, connectionListener])
3 Um método de fábrica, que retorna um novo '[Link]' e se conecta ao endereço e porta
fornecidos.
[Link](caminho[, connectListener])
Cria uma conexão de soquete Unix para o caminho. O parâmetro connectListener será adicionado como
6
listener para o evento 'connect'. É um método de fábrica que retorna um novo '[Link]'.
[Link](path[, connectListener])
Cria uma conexão de soquete Unix para o caminho. O parâmetro connectListener será adicionado como
7
listener para o evento 'connect'. É um método de fábrica que retorna um novo '[Link]'.
[Link] (entrada)
8 Testa se a entrada é um endereço IP. Retorna 0 para strings inválidas, 4 para endereços IP versão
4 e 6 para endereços IP versão 6.
net.isIPv4(entrada)
9
Retorna verdadeiro se a entrada for um endereço IP da versão 4, caso contrário, retorna falso.
net.isIPv6(entrada)
10
Retorna true se a entrada for um endereço IP da versão 6, caso contrário, retorna false.
Classe –[Link]
Esta classe é usada para criar um servidor TCP ou local.
Métodos
86
Machine Translated by Google
[Link]
2 [Link](path[, callback])
Inicie um servidor de soquete local escutando conexões no caminho fornecido.
[Link](handle[, callback])
O objeto handle pode ser definido como um servidor ou soquete (qualquer coisa com um
3 membro _handle subjacente) ou um objeto {fd: <n>}. Isso fará com que o servidor aceite
conexões no identificador especificado, mas presume-se que o descritor ou identificador de
arquivo já foi vinculado a uma porta ou soquete de domínio.
A escuta em um descritor de arquivo não é compatível com o Windows.
[Link](options[, callback])
As propriedades port, host e backlog das opções, bem como a função de retorno de
4 chamada opcional, se comportam como em uma chamada para [Link](port, [host],
[backlog], [callback]) . Alternativamente, a opção de caminho pode ser usada para especificar
um soquete UNIX.
[Link]([retorno de chamada])
5 Finalmente fechado quando todas as conexões são encerradas e o servidor emite um evento
'close'.
endereço do servidor()
6 Retorna o endereço vinculado, o nome da família de endereços e a porta do servidor
conforme relatado pelo sistema operacional.
[Link]()
7 Chamar unref em um servidor permitirá que o programa saia se este for o único servidor
ativo no sistema de eventos. Se o servidor já não for refd, então
chamar unref novamente não terá efeito.
[Link]()
8 Ao contrário de unref, chamar ref em um servidor não refd anteriormente não permitirá que
o programa saia se for o único servidor restante (o comportamento padrão). Se o servidor for
refd, chamar o ref novamente não terá efeito.
[Link](retorno de chamada)
9 Obtenha de forma assíncrona o número de conexões simultâneas no servidor.
Funciona quando os soquetes foram enviados para garfos. O retorno de chamada deve receber dois
argumentos err e count.
Eventos
1 ouvindo
Emitido quando o servidor foi vinculado após chamar [Link].
conexão
2 Emitido quando uma nova conexão é feita. Objeto de soquete, o objeto de conexão está
disponível para o manipulador de eventos. Socket é uma instância de [Link].
87
Machine Translated by Google
[Link]
perto
3 Emitido quando o servidor fecha. Observe que, se houver conexões, esse evento não será emitido
até que todas as conexões sejam encerradas.
erro
4 Emitido quando ocorre um erro. O evento 'close' será chamado diretamente após este evento.
Classe –[Link]
Este objeto é uma abstração de um soquete TCP ou local. As instâncias [Link] implementam uma interface
Stream duplex. Eles podem ser criados pelo usuário e usados como cliente (com connect()) ou podem ser criados
pelo Node e passados ao usuário através do evento 'connection' de um servidor.
Eventos
conectar
2
Emitido quando uma conexão de soquete é estabelecida com sucesso.
dados
3 Emitido quando os dados são recebidos. Os dados do argumento serão um Buffer ou String.
A codificação de dados é definida por [Link]().
fim
4
Emitido quando a outra extremidade do soquete envia um pacote FIN.
tempo esgotado
5 Emitido se o soquete atingir o tempo limite de inatividade. Isso é apenas para notificar que o soquete
está ocioso. O usuário deve fechar manualmente a conexão.
ralo
6
Emitido quando o buffer de gravação fica vazio. Pode ser usado para acelerar uploads.
erro
7 Emitido quando ocorre um erro. O evento 'close' será chamado diretamente após este evento.
perto
8 Emitido quando o soquete está totalmente fechado. O argumento had_error é um booleano que
indica se o socket foi fechado devido a um erro de transmissão.
Propriedades
[Link] fornece muitas propriedades úteis para obter melhor controle sobre as interações de soquete.
88
Machine Translated by Google
[Link]
1 [Link]
Esta propriedade mostra o número de caracteres atualmente armazenados em buffer para serem gravados.
2 [Link]
A representação de string do endereço IP remoto. Por exemplo, '[Link]' ou
'[Link]'.
3 [Link]
A representação de string da família de IP remoto. 'IPv4' ou 'IPv6'.
4 [Link]
A representação numérica da porta remota. Por exemplo, 80 ou 21.
5 [Link]
A representação de string do endereço IP local ao qual o cliente remoto está se conectando.
Por exemplo, se você estiver ouvindo em '[Link]' e o cliente se conectar em '[Link]', o
valor será '[Link]'.
6 [Link]
A representação numérica da porta local. Por exemplo, 80 ou 21.
7 [Link]
A quantidade de bytes recebidos.
8 [Link]
A quantidade de bytes enviados.
Métodos
S. Não. Método e Descrição
1 new [Link]([opções])
Construa um novo objeto de soquete.
[Link](path[, connectListener])
Abre a conexão para um determinado soquete. Se a porta e o host forem fornecidos, o
3 soquete será aberto como um soquete TCP, se o host for omitido, o localhost será assumido.
Se um caminho for fornecido, o soquete será aberto como um soquete Unix para esse caminho.
4 [Link]([codificação])
Defina a codificação para o soquete como um fluxo legível.
89
Machine Translated by Google
[Link]
[Link]([dados][, codificação])
6 Fecha o socket pela metade, ou seja, envia um pacote FIN. É possível que o servidor ainda envie
alguns dados.
[Link]()
7 Garante que nenhuma atividade de E/S ocorra neste soquete. Necessário apenas em caso de erros
(erro de análise ou algo assim).
[Link]()
8 Pausa a leitura dos dados. Ou seja, eventos de 'dados' não serão emitidos. Útil para atrasar um upload.
[Link]()
9
Retoma a leitura após uma chamada para pause().
[Link](timeout[, callback])
10 Define o soquete para o tempo limite após o tempo limite de milissegundos de inatividade no
soquete. Por padrão, o [Link] não tem tempo limite.
[Link] ([noDelay])
Desativa o algoritmo Nagle. Por padrão, as conexões TCP usam o algoritmo Nagle, armazenam
11 os dados em buffer antes de enviá-los. Definir true para noDelay disparará imediatamente os dados
cada vez que [Link]() for chamado. O padrão noDelay é true.
[Link]([enable][, initialDelay])
12 Ative/desative a funcionalidade keep-alive e, opcionalmente, defina o atraso inicial antes que o
primeiro probe keepalive seja enviado em um soquete ocioso. habilitar os padrões para false.
[Link]ço()
Retorna o endereço associado, o nome da família de endereços e a porta do soquete conforme
13
relatado pelo sistema operacional. Retorna um objeto com três propriedades, por exemplo { port:
12346, family: 'IPv4', address: '[Link]' }.
[Link]()
14 Chamar unref em um soquete permitirá que o programa saia se este for o único soquete ativo no
sistema de eventos. Se o soquete já não for refd, então
chamar unref novamente não terá efeito.
[Link]()
15 Ao contrário de unref, chamar ref em um soquete não refd anteriormente não permitirá que o
programa saia se for o único soquete restante (o comportamento padrão). Se o soquete for refd, chamar
ref novamente não terá efeito.
Exemplo
Arquivo: [Link]
90
Machine Translated by Google
[Link]
$ node [Link]
Verifique a saída.
Arquivo: [Link]
$ node [Link]
Verifique a saída.
91
Machine Translated by Google
[Link]
conectado ao servidor!
Olá Mundo!
Desconectado do servidor
cliente desconectado
Módulo DNS
O módulo dns do [Link] é usado para fazer a pesquisa de DNS real, bem como para usar as funcionalidades de
resolução de nomes do sistema operacional subjacente. Este módulo fornece um wrapper de rede assíncrono e pode
ser importado usando a seguinte sintaxe.
Métodos
[Link]
address é uma matriz 2-d dos registros de texto disponíveis para o nome do host (por exemplo, [ ['v=spf1
ip4:[Link] ', '~all' ] ]). Cada sub-matriz contém pedaços TXT de um registro. Dependendo do caso de uso,
eles podem ser unidos ou tratados separadamente.
[Link](hostname, callback)
9 O mesmo que [Link](), mas apenas para consultas de registro de início de autoridade (registro SOA).
11 O mesmo que [Link](), mas apenas para registros de nomes canônicos (registros CNAME).
endereços é uma matriz dos registros de nomes canônicos disponíveis para o nome do host (por
exemplo, ['[Link]']).
[Link]()
13 Retorna uma matriz de endereços IP como strings que estão sendo usadas atualmente para resolução.
[Link](servidores)
14 Dada uma matriz de endereços IP como strings, defina-os como os servidores a serem usados para resolver.
rrtypes
A seguir está a lista de rrtypes válidos usados pelo método [Link]():
93
Machine Translated by Google
[Link]
Códigos de erro
Exemplo
94
Machine Translated by Google
[Link]
[Link]('endereço:', endereço);
se (erro) {
[Link]([Link]);
});
});
$ nó [Link]
Verifique a saída.
endereço: [Link]
Módulo de domínio
O módulo de domínio [Link] é usado para interceptar erros não tratados. Esses erros não tratados podem ser
interceptados usando ligação interna ou ligação externa. Se os erros não forem tratados,
então eles simplesmente travarão o aplicativo Node.
• Internal Binding - O emissor de erro está executando seu código dentro do método run de um
domínio.
• Ligação Externa - O emissor de erro é adicionado explicitamente a um domínio usando seu add
método.
A classe de domínio do módulo de domínio é usada para fornecer a funcionalidade de erros de roteamento e exceções
não capturadas para o objeto Domínio ativo. É uma classe filha de EventEmitter. Para lidar com os erros que ele detecta,
ouça seu evento de erro. Ele é criado usando a seguinte sintaxe:
Métodos
95
Machine Translated by Google
[Link]
domí[Link](função)
1 Execute a função fornecida no contexto do domínio, vinculando implicitamente todos os emissores
de eventos, temporizadores e solicitações de baixo nível criados nesse contexto.
Essa é a maneira mais básica de usar um domínio.
domí[Link](emissor)
2 Adiciona explicitamente um emissor ao domínio. Se algum manipulador de eventos chamado pelo
emissor lançar um erro, ou se o emissor emitir um evento de erro, ele será roteado para o evento
de erro do domínio, assim como na ligação implícita.
domí[Link](emissor)
3 O oposto de [Link](emissor). Remove a manipulação de domínio do emissor especificado.
domí[Link](retorno de chamada)
4 A função retornada será um wrapper em torno da função de retorno de chamada fornecida.
Quando a função retornada é chamada, qualquer erro gerado será roteado para o evento de erro
do domínio.
[Link](retorno de chamada)
5 Este método é quase idêntico ao [Link](callback). No entanto, além de capturar erros
lançados, ele também interceptará objetos Error enviados como o primeiro argumento para a
função.
domí[Link]()
O método enter é o encanamento usado pelos métodos run, bind e intercept para definir o domínio
ativo. Ele define [Link] e [Link] para o domínio e, implicitamente, envia o
6 domínio para a pilha de domínio gerenciada pelo módulo de domínio (consulte [Link]() para
obter detalhes sobre a pilha de domínio). A chamada para enter delimita o início de uma cadeia
de chamadas assíncronas e operações de E/S vinculadas a um domínio.
domí[Link]ída()
O método exit sai do domínio atual, retirando-o da pilha de domínios.
Sempre que a execução alterna para o contexto de uma cadeia diferente de chamadas
7
assíncronas, é importante garantir que o domínio atual seja encerrado.
A chamada para sair delimita o fim ou uma interrupção na cadeia de chamadas assíncronas e
operações de E/S vinculadas a um domínio.
domí[Link]()
8 Depois que o descarte for chamado, o domínio não será mais usado por retornos de chamada
vinculados ao domínio por meio de execução, ligação ou interceptação, e um evento de descarte será emitido
Propriedades
[Link]
1 Uma matriz de temporizadores e emissores de eventos que foram explicitamente adicionados ao
domínio.
Exemplo
[Link]
//Cria um domínio
[Link]('erro', function(err){
[Link]("domain1 lidou com este erro ("+[Link]+")");
});
// Ligação explícita
domí[Link](emissor1);
[Link]('erro',function(err){
[Link]("ouvinte lidou com este erro ("+[Link]+")");
});
[Link]('error');
[Link]('erro', function(err){
// Ligação implícita
[Link](function(){
var emissor2 = new EventEmitter();
[Link]('error',new Error('A ser tratado pelo domínio2'));
});
97
Machine Translated by Google
[Link]
domí[Link](emissor1);
$ nó [Link]
Verifique a saída.
[Link]
em Object.<anonymous> (C:\Nodejs_WorkSpace\[Link]:23)
em Module._compile ([Link]:26)
em [Link]._extensions..js ([Link]:10)
em [Link] ([Link]:32)
em [Link]._load ([Link]:12)
em [Link] ([Link]:10)
na inicialização ([Link]:16)
em [Link]:3
98
Machine Translated by Google
A maioria dos servidores da web suporta scripts do lado do servidor, usando linguagens de script ou redirecionando a
tarefa para um servidor de aplicativos que recupera dados de um banco de dados e
executa lógica complexa e, em seguida, envia um resultado para o cliente HTTP por meio do servidor Web.
O servidor web Apache é um dos servidores web mais usados. É um projeto de código aberto.
• Cliente - Esta camada consiste em navegadores da web, navegadores móveis ou aplicativos que
pode fazer solicitações HTTP para o servidor web.
• Servidor - Esta camada possui o servidor Web que pode interceptar as solicitações feitas pelos clientes e passar
a resposta.
• Negócios - Esta camada contém o servidor de aplicativos que é utilizado pelo servidor web para fazer o
processamento necessário. Essa camada interage com a camada de dados por meio do banco de dados ou de
alguns programas externos.
• Dados - Esta camada contém os bancos de dados ou qualquer outra fonte de dados.
99
Machine Translated by Google
[Link]
Arquivo: [Link]
var fs = require('fs');
//Cria um servidor
se (erro) {
[Link](erro);
// Status HTTP: 404 : NÃO ENCONTRADO
}senão{
//Página encontrada
[Link]([Link]());
}
[Link]();
100
Machine Translated by Google
[Link]
});
}).listen(8081);
Em seguida, vamos criar o seguinte arquivo html chamado [Link] no mesmo diretório em que você criou
o [Link]
Arquivo: [Link]
<html>
<cabeça>
<title>Página de amostra</title>
</head>
<corpo>
Olá Mundo!
</body>
</html>
$ node [Link]
Verifique a saída.
101
Machine Translated by Google
[Link]
Arquivo: [Link]
porta: '8081',
caminho: '/[Link]'
};
102
Machine Translated by Google
[Link]
[Link]('dados', function(dados) {
corpo += dados;
});
[Link]('fim', function() {
[Link](corpo);
});
[Link]();
Agora execute o [Link] a partir de um terminal de comando diferente do [Link] para ver o resultado:
$ node [Link]
Verifique a saída.
<html>
<cabeça>
<title>Página de amostra</title>
</head>
<corpo>
Olá Mundo!
</body>
</html>
103
Machine Translated by Google
• Define uma tabela de roteamento que é usada para executar diferentes ações baseadas em HTTP
Método e URL.
• Permite renderizar dinamicamente páginas HTML com base na passagem de argumentos para
modelos.
Instalando o Expresso
Em primeiro lugar, instale o framework Express globalmente usando o NPM para que ele possa ser usado para
criar um aplicativo da Web usando o terminal do nó.
O comando acima salva a instalação localmente no diretório node_modules e cria um diretório expresso dentro
de node_modules. Você deve instalar os seguintes módulos importantes junto com o express:
• body-parser - Este é um middleware [Link] para lidar com JSON, Raw, Text e URL
dados de formulário codificados.
104
Machine Translated by Google
[Link]
})
Salve o código acima em um arquivo chamado [Link] e execute-o com o comando a seguir.
$ node [Link]
105
Machine Translated by Google
[Link]
Solicitação e resposta
O aplicativo expresso usa objetos de função de retorno de chamada cujos parâmetros são
solicitação e resposta .
// --
})
• Objeto de solicitação - O objeto de solicitação representa a solicitação HTTP e possui propriedades para a string
de consulta da solicitação, parâmetros, corpo, cabeçalhos HTTP etc.
em.
Você pode imprimir objetos req e res que fornecem muitas informações relacionadas à solicitação e resposta HTTP,
incluindo cookies, sessões, URL, etc.
Objeto de solicitação
O objeto req representa a solicitação HTTP e possui propriedades para a string de consulta da solicitação, parâmetros,
corpo, cabeçalhos HTTP e assim por diante.
[Link]
1 Essa propriedade contém uma referência à instância do aplicativo expresso que está usando o middleware.
2 [Link]
O caminho de URL no qual uma instância de roteador foi montada.
[Link]
Contém pares de valores-chave de dados enviados no corpo da solicitação. Por padrão, é indefinido e é
3
preenchido quando você usa middleware de análise de corpo, como body-parser
[Link]
4 Ao usar o middleware do analisador de cookies, essa propriedade é um objeto que contém os cookies
enviados pela solicitação.
[Link]
5
Indica se a solicitação é "fresca". É o oposto de [Link].
6 [Link] do host
Contém o nome do host do cabeçalho HTTP "Host".
106
Machine Translated by Google
[Link]
[Link]
7
O endereço IP remoto da solicitação.
[Link]
8 Quando a configuração do proxy de confiança for verdadeira, essa propriedade conterá uma matriz
de endereços IP especificados no cabeçalho da solicitação “X-Forwarded-For”.
[Link]
9 Esta propriedade é muito parecida com [Link]; no entanto, ele retém o URL de solicitação original,
permitindo que você reescreva [Link] livremente para fins de roteamento interno.
[Link]
Um objeto contendo propriedades mapeadas para os “parâmetros” da rota nomeada. Por exemplo, se
10
você tiver a rota /user/:name, a propriedade "name" estará disponível como [Link]. Esse objeto
é padronizado para {}.
11
caminho req
Contém a parte do caminho da URL de solicitação.
[Link]
12
A string do protocolo de solicitação, "http" ou "https" quando solicitado com TLS.
[Link]
13
Um objeto que contém uma propriedade para cada parâmetro de string de consulta na rota.
[Link]
14
A rota atualmente correspondente, uma string.
[Link]
15
Um booleano que é verdadeiro se uma conexão TLS for estabelecida.
[Link]
16 Ao usar o middleware do analisador de cookies, esta propriedade contém cookies assinados enviados
pela solicitação, não assinados e prontos para uso.
17 [Link]
Indica se a solicitação está "obsoleta" e é o oposto de [Link].
[Link]ínios
18
Uma matriz de subdomínios no nome de domínio da solicitação.
[Link]
Um valor booleano que é verdadeiro se o campo de cabeçalho "X-Requested-With" da solicitação for
19
"XMLHttpRequest", indicando que a solicitação foi emitida por uma biblioteca cliente, como jQuery
[Link](tipos)
[Link](tipos)
Esse método verifica se os tipos de conteúdo especificados são aceitáveis, com base no campo de cabeçalho Aceitar HTTP
da solicitação. Seguem alguns exemplos:
107
Machine Translated by Google
[Link]
// Aceita: texto/html
[Link]('html');
// => "html"
[Link]('texto/html');
// => "texto/html"
[Link](campo)
[Link](campo)
Este método retorna o campo de cabeçalho de solicitação HTTP especificado. Seguem alguns exemplos:
[Link]('Tipo de conteúdo');
// => "texto/simples"
[Link]('tipo de conteúdo');
// => "texto/simples"
[Link]('Algo');
// => indefinido
[Link](tipo)
[Link](tipo)
Esse método retornará true se o campo de cabeçalho HTTP "Content-Type" da solicitação recebida
corresponder ao tipo MIME especificado pelo parâmetro type. Seguem alguns exemplos:
108
Machine Translated by Google
[Link]
[Link](nome [, defaultValue])
[Link](nome [, defaultValue])
Este método retorna o valor do nome do parâmetro quando presente. Seguem alguns exemplos:
// ?name=tobi
[Link]('nome')
// => "grande"
// POST nome=tobi
[Link]('nome')
// => "grande"
[Link]('nome')
// => "grande"
Objeto de resposta
O objeto res representa a resposta HTTP que um aplicativo Express envia quando recebe uma solicitação HTTP.
[Link]
1 Essa propriedade contém uma referência à instância do aplicativo expresso que está usando o middleware.
[Link]
2
Propriedade booleana que indica se o aplicativo enviou cabeçalhos HTTP para a resposta.
[Link]
3
Um objeto que contém variáveis locais de resposta com escopo para a solicitação.
[Link](campo [, valor])
[Link](campo [, valor])
Este método anexa o valor especificado ao campo de cabeçalho de resposta HTTP. Seguem alguns exemplos:
109
Machine Translated by Google
[Link]
[Link]([nome do arquivo])
[Link]([nome do arquivo])
Este método é usado para enviar um arquivo como anexo na resposta HTTP. Seguem alguns exemplos:
[Link]('caminho/para/[Link]');
Este método é usado para definir o nome do cookie como valor. O parâmetro value pode ser uma string
ou objeto convertido em JSON. Seguem alguns exemplos:
[Link](nome [, opções])
[Link](nome [, opções])
Este método é usado para limpar o cookie especificado pelo nome. Seguem alguns exemplos:
Este método é usado para transferir o arquivo no caminho como um "anexo". Normalmente, os
navegadores solicitarão ao usuário o download. Seguem alguns exemplos:
[Link]('/relató[Link]');
[Link]('/relató[Link]', 'relató[Link]');
110
Machine Translated by Google
[Link]
});
[Link]([dados] [, codificação])
[Link]([dados] [, codificação])
Este método é usado para finalizar o processo de resposta. Seguem alguns exemplos:
reenviar();
[Link](404).end();
[Link](objeto)
[Link](objeto)
Esse método é usado para realizar a negociação de conteúdo no cabeçalho Accept HTTP no objeto
de solicitação, quando presente. Seguem alguns exemplos:
[Link]({
'texto/simples': function(){
[Link]('hey');
},
'texto/html': function(){
[Link]('
Ei
');
},
'aplicativo/json': function(){
[Link]({ mensagem: 'hey' });
},
'padrão': function() {
// registra a requisição e responde com 406
[Link](406).send('Não Aceitável');
}
111
Machine Translated by Google
[Link]
});
[Link](campo)
[Link](campo)
Este método é usado para retornar o cabeçalho de resposta HTTP especificado pelo campo. Aqui está
um exemplo:
[Link]('Tipo de conteúdo');
[Link]([corpo])
[Link]([corpo])
Este método é usado para enviar uma resposta JSON. Seguem alguns exemplos:
[Link](null)
[Link]({ usuário: 'tobi' })
[Link](500).json({ error: 'message' })
[Link]([corpo])
[Link]([corpo])
Este método é usado para enviar uma resposta JSON com suporte a JSONP. Seguem alguns exemplos:
[Link](null)
[Link]({ usuário: 'tobi' })
[Link](500).jsonp({ error: 'message' })
[Link](links)
[Link](links)
Este método é usado para unir os links fornecidos como propriedades do parâmetro para preencher o campo
de cabeçalho Link HTTP da resposta. Seguem alguns exemplos:
[Link]({
próximo: '[Link]
último: '[Link]
});
[Link](caminho)
112
Machine Translated by Google
[Link]
[Link](caminho)
Este método é usado para definir o campo de cabeçalho HTTP de localização de resposta com base no
parâmetro de caminho especificado. Seguem alguns exemplos:
[Link]('/foo/bar');
[Link]('foo/bar');
[Link]('[Link]
[Link]([status,] caminho)
[Link]([status,] caminho)
Este método é usado para redirecionar para a URL derivada do caminho especificado, com o status do
código de status HTTP especificado. Seguem alguns exemplos:
[Link]('/foo/bar');
[Link]('[Link]
[Link](301, '[Link]
Este método é usado para renderizar uma visualização e envia a string HTML renderizada para o cliente.
Seguem alguns exemplos:
[Link]('index');
// ...
});
[Link]([corpo])
[Link]([corpo])
Este método é usado para enviar a resposta HTTP. Seguem alguns exemplos:
[Link](new Buffer('whoop'));
[Link]('
113
Machine Translated by Google
[Link]
alguns html
');
Este método é usado para transferir o arquivo no caminho fornecido. Define o campo de cabeçalho HTTP de
resposta Content-Type com base na extensão do nome do arquivo. Aqui está um exemplo:
});
[Link] (statusCode)
[Link] (statusCode)
Esse método é usado para definir o código de status HTTP de resposta para statusCode e enviar sua
representação de string como o corpo da resposta. Seguem alguns exemplos:
[Link](campo [, valor])
[Link](campo [, valor])
Esse método é usado para definir o valor do campo de cabeçalho HTTP da resposta. Seguem alguns
exemplos:
[Link]('Content-Type', 'text/plain');
[Link]({
'Tipo de conteúdo': 'texto/simples',
'Comprimento do conteúdo': '123',
'ETag': '12345'
})
[Link](código)
114
Machine Translated by Google
[Link]
[Link](código)
Este método é usado para definir o status HTTP para a resposta. Seguem alguns exemplos:
[Link](403).end();
[Link](400).send('Pedido incorreto');
[Link](404).sendFile('/absolute/path/to/[Link]');
[Link](type)
[Link](type)
Esse método é usado para definir o cabeçalho HTTP Content-Type para o tipo MIME. Seguem alguns
exemplos:
Roteamento Básico
Vimos um aplicativo básico que atende a solicitação HTTP para a página inicial. Roteamento refere-se a
determinar como um aplicativo responde a uma solicitação de cliente para um determinado endpoint, que é
um URI (ou caminho) e um método de solicitação HTTP específico (GET, POST e assim por diante).
Vamos estender nosso programa Hello World para lidar com mais tipos de solicitações HTTP.
[Link]
[Link]('Olá POST');
})
[Link]('Listagem de página');
})
// Isso responde a uma solicitação GET para abcd, abxcd, ab123cd e assim por diante
})
})
Salve o código acima em um arquivo chamado [Link] e execute-o com o comando a seguir.
$ node [Link]
116
Machine Translated by Google
[Link]
Agora você pode tentar solicitações diferentes em [Link] para ver a saída gerada pelo
[Link]. A seguir estão algumas capturas de tela mostrando respostas diferentes para URLs
diferentes.
117
Machine Translated by Google
[Link]
O Express fornece um middleware integrado [Link] para servir arquivos estáticos, como imagens,
CSS, JavaScript, etc.
Você simplesmente precisa passar o nome do diretório onde você mantém seus ativos estáticos para o
middleware [Link] para começar a servir os arquivos diretamente. Por exemplo, se você mantiver
seus arquivos de imagens, CSS e JavaScript em um diretório chamado public, poderá fazer isso:
[Link]([Link]('public'));
node_modules
[Link]
público/
público/imagens
public/images/[Link]
Vamos modificar o aplicativo "Hello Word" para adicionar a funcionalidade de lidar com arquivos estáticos.
[Link]([Link]('public'));
[Link]
})
Salve o código acima em um arquivo chamado [Link] e execute-o com o comando a seguir.
$ node [Link]
Método GET
Aqui está um exemplo simples que passa dois valores usando o método HTML FORM GET. Vamos usar o
roteador process_get dentro do [Link] para lidar com essa entrada.
<html>
<corpo>
119
Machine Translated by Google
[Link]
</form>
</body>
</html>
Vamos salvar o código acima em [Link] e modificar [Link] para lidar com solicitações de página inicial,
bem como a entrada enviada pelo formulário HTML.
[Link]([Link]('public'));
})
first_name:[Link].first_name,
last_name:[Link].last_name
};
[Link](resposta);
[Link]([Link](resposta));
})
})
Acessar o documento HTML usando http:// [Link]:8081/ [Link] gerará o seguinte formulário:
120
Machine Translated by Google
[Link]
Agora você pode inserir o nome e o sobrenome e clicar no botão enviar para ver o resultado e ele deve
retornar o seguinte resultado:
{"first_name":"João","last_name":"Paulo"}
Método POST
Aqui está um exemplo simples que passa dois valores usando o método HTML FORM POST. Vamos usar o
roteador process_get dentro do [Link] para lidar com essa entrada.
<html>
<corpo>
</body>
</html>
Vamos salvar o código acima em [Link] e modificar [Link] para lidar com solicitações de página inicial,
bem como a entrada enviada pelo formulário HTML.
[Link]([Link]('public'));
[Link]
})
Acessar o documento HTML usando http:// [Link]:8081/ [Link] gerará o seguinte formulário:
Agora você pode inserir o nome e o sobrenome e clicar no botão enviar para ver o seguinte resultado:
{"first_name":"João","last_name":"Paulo"}
122
Machine Translated by Google
[Link]
Upload de arquivo
O código HTML a seguir cria um formulário de upload de arquivo. Este formulário tem o atributo method
definido como POST e o atributo enctype está definido como multipart/form-data
<html>
<cabeça>
<corpo>
<h3>Carregar arquivo:</h3>
enctype="multipart/form-data">
</body>
</html>
Vamos salvar o código acima em [Link] e modificar [Link] para lidar com solicitações de página inicial, bem
como upload de arquivos.
var fs = require("fs");
[Link]([Link]('public'));
})
123
Machine Translated by Google
[Link]
[Link]([Link]);
[Link]([Link]);
[Link]([Link]);
resposta = {
mensagem:'Arquivo carregado com sucesso',
nome do arquivo:[Link]
};
}
[Link](resposta);
[Link]( [Link](resposta));
});
});
})
})
Acessar o documento HTML usando http:// [Link]:8081/ [Link] gerará o seguinte formulário:
124
Machine Translated by Google
[Link]
Gerenciamento de cookies
Você pode enviar cookies para um servidor [Link] que pode lidar com o mesmo usando a seguinte
opção de middleware. Segue um exemplo simples para imprimir todos os cookies enviados pelo cliente.
[Link](8081)
125
Machine Translated by Google
Um servidor REST simplesmente fornece acesso aos recursos e um cliente REST acessa e modifica os recursos usando o
protocolo HTTP. Aqui cada recurso é identificado por URIs/IDs globais. REST usa várias representações para representar um
recurso, por exemplo, texto, JSON, XML, mas JSON é o mais popular.
Métodos HTTP
Os quatro métodos HTTP a seguir são comumente usados na arquitetura baseada em REST.
Os serviços da Web baseados na Arquitetura REST são conhecidos como serviços da Web RESTful. Essas teias
serviços usam métodos HTTP para implementar o conceito de arquitetura REST. Um serviço web RESTful geralmente define
um URI, Uniform Resource Identifier, que fornece representação de recursos como JSON e um conjunto de métodos HTTP.
"usuário1": {
"nome" : "mahesh",
126
Machine Translated by Google
[Link]
"senha": "senha1",
"profissão" : "professor",
"id": 1
},
"usuário2": {
"nome" : "certeza",
"senha": "senha2",
"profession" : "bibliotecário",
"id": 2
},
"usuário3": {
"nome" : "ramesh",
"senha": "senha3",
"profission" : "escriturário",
"id": 3
HTTP
S. Não. URI Método corpo do POST Resultado
Estamos mantendo a maior parte de todos os exemplos na forma de hard-coding, supondo que você já saiba
como passar valores do front-end usando Ajax ou dados de formulário simples e como processá-los usando
o objeto Express Request .
127
Machine Translated by Google
[Link]
Listar usuários
Vamos implementar nossa primeira API RESTful listUsers usando o seguinte código em um arquivo
[Link] :
[Link]
})
Agora tente acessar a API definida usando http:// [Link]:8081/ listUsers em sua máquina local. Deve
produzir o seguinte resultado:
Você pode alterar o endereço IP fornecido quando colocar a solução no ambiente de produção.
{
"usuário1": {
"nome" : "mahesh",
"senha": "senha1",
"profissão" : "professor",
"id": 1
},
"usuário2": {
"nome" : "certeza",
"senha": "senha2",
"profession" : "bibliotecário",
128
Machine Translated by Google
[Link]
"id": 2
},
"usuário3": {
"nome" : "ramesh",
"senha": "senha3",
"profission" : "escriturário",
"id": 3
}
}
Adicionar usuários
A API a seguir mostrará como adicionar um novo usuário na lista. Segue o detalhe do
novo usuário:
usuário = {
"usuário4": {
"name" : "mohit",
"senha": "senha4",
"profissão" : "professor",
"id": 4
}
}
Você pode aceitar a mesma entrada na forma de JSON usando a chamada Ajax, mas para fins de
demonstração, estamos codificando aqui. A seguir está a API addUser para um novo usuário no
banco de dados:
[Link]
var usuário = {
"usuário4": {
"name" : "mohit",
"senha": "senha4",
"profissão" : "professor",
"id": 4
129
Machine Translated by Google
[Link]
}
}
[Link](dados);
[Link]([Link](dados));
});
})
Agora tente acessar a API definida usando a URL: [Link] e o Método HTTP:
POST na máquina local usando qualquer cliente REST. Isso deve produzir o seguinte resultado:
{
"user1":{"name":"mahesh","password":"password1","profession":"professor","id":1},
"user2":{"name":"suresh","password":"password2","profession":"librarian","id":2},
"user3":{"name":"ramesh","password":"password3","profession":"clerk","id":3},
"user4":{"name":"mohit","password":"password4","profession":"professor","id":4}
}
Mostrar detalhes
Agora implementaremos uma API que será chamada usando o ID do usuário e exibirá os detalhes do
usuário correspondente.
[Link]
var expresso = require('expresso');
var app = expresso();
var fs = require("fs");
130
Machine Translated by Google
[Link]
})
Agora tente acessar a API definida usando a URL: [Link] e o Método HTTP: GET na
máquina local usando qualquer cliente REST. Isso deve produzir o seguinte resultado:
{"name":"suresh","password":"password2","profession":"bibliotecário","id":2}
Excluir um usuário
Essa API é muito parecida com a API addUser, onde recebemos dados de entrada por meio de [Link]
e, com base no ID do usuário, excluímos esse usuário do banco de dados. Para manter nosso programa
simples, assumimos que vamos excluir o usuário com ID 2.
[Link]
var expresso = require('expresso');
var app = expresso();
var fs = require("fs");
var id = 2;
131
Machine Translated by Google
[Link]
[Link](dados);
[Link]([Link](dados));
});
})
Agora tente acessar a API definida usando a URL: [Link] e o método HTTP:
DELETE na máquina local usando qualquer cliente REST. Isso deve produzir o seguinte resultado:
{"user1":{"name":"mahesh","password":"password1","profession":"professor","id":1},
"user3":{"name":"ramesh","password":"password3","profession":"clerk","id":3}}
132
Machine Translated by Google
[Link]
17. Dimensionamento de um aplicativo
O [Link] é executado em um modo de thread único, mas usa um paradigma orientado a eventos para lidar
com a simultaneidade. Também facilita a criação de processos filhos para alavancar o processamento paralelo
em sistemas baseados em CPU multi-core.
O Node fornece o módulo child_process que possui as três maneiras principais a seguir de criar um
processo filho.
O método exec()
O método child_process.exec executa um comando em um shell e armazena a saída em buffer. Possui
a seguinte assinatura:
Parâmetros
Segue a descrição dos parâmetros utilizados:
• command (String) O comando a ser executado, com argumentos separados por espaço
[Link]
• retorno de chamada A função obtém três argumentos error, stdout e stderr que são chamados com a
saída quando o processo termina.
O método exec() retorna um buffer com tamanho máximo e aguarda o término do processo e tenta retornar
todos os dados armazenados em buffer de uma só vez.
Exemplo
Vamos criar dois arquivos js chamados [Link] e [Link]:
Arquivo: [Link]
"
[Link]("Processo filho + [Link][2] + "executado." );
Arquivo: [Link]
const fs = require('fs');
se (erro) {
[Link]([Link]);
});
});
134
Machine Translated by Google
[Link]
$ node [Link]
stderr:
stderr:
O método spawn()
O método child_process.spawn inicia um novo processo com um determinado comando. Possui a seguinte
assinatura:
Parâmetros
Segue a descrição dos parâmetros utilizados:
135
Machine Translated by Google
[Link]
O método spawn() retorna streams (stdout & stderr) e deve ser utilizado quando o processo retornar um grande
volume de dados. spawn() começa a receber a resposta assim que o processo começa a ser executado.
Exemplo
Crie dois arquivos js chamados [Link] e [Link]:
Arquivo: [Link]
"
[Link]("Processo filho + [Link][2] + "executado." );
Arquivo: [Link]
const fs = require('fs');
});
});
$ node [Link]
[Link]
O método fork()
child_process.fork é um caso especial de spawn() para criar processos Node. Possui a seguinte assinatura:
Parâmetros
Segue a descrição dos parâmetros utilizados:
o silent (Boolean) Se true, stdin, stdout e stderr do filho serão canalizados para o pai, caso contrário serão
herdados do pai. Veja as opções "pipe" e "inherit" para o stdio de spawn() para mais detalhes sobre isso.
O padrão é falso.
O método fork retorna um objeto com um canal de comunicação embutido, além de ter todos os métodos em uma instância
ChildProcess normal.
Exemplo
Crie dois arquivos js chamados [Link] e [Link]:
137
Machine Translated by Google
[Link]
Arquivo: [Link]
"
[Link]("Processo filho + [Link][2] + "executado." );
Arquivo: [Link]
const fs = require('fs');
});
$ node [Link]
138
Machine Translated by Google
JXcore, que é um projeto de código aberto, apresenta um recurso exclusivo para empacotamento e criptografia de
arquivos de origem e outros ativos em pacotes JX.
Considere que você tem um projeto grande que consiste em muitos arquivos. JXcore pode empacotar todos eles
em um único arquivo para simplificar a distribuição. Este capítulo fornece uma visão geral rápida de todo o processo
a partir da instalação do JXcore.
Instalação JXcore
A instalação do JXcore é bastante simples. Aqui nós fornecemos instruções passo a passo sobre como instalar o
JXcore em seu sistema. Siga os passos indicados abaixo:
Passo 1
$ wget [Link]
Passo 2
Descompacte o arquivo baixado jx_rh64.zip e copie o binário jx em /usr/bin ou pode estar em qualquer outro
diretório baseado na configuração do seu sistema.
$ descompacte jx_rh64.zip
$ cp jx_rh64/jx /usr/bin
etapa 3
Defina sua variável PATH adequadamente para executar o jx de qualquer lugar que desejar.
$ export PATH=$PATH:/usr/bin
Passo 4
Você pode verificar sua instalação emitindo um comando simples, conforme mostrado abaixo. Você deve
encontre-o funcionando e imprimindo seu número de versão da seguinte forma:
$ jx --versão
v0.10.32
139
Machine Translated by Google
[Link]
Empacotando o código
Considere que você tem um projeto com os seguintes diretórios onde você manteve todos os seus arquivos,
incluindo [Link], arquivo principal, [Link] e todos os módulos instalados localmente.
Para empacotar o projeto acima, basta entrar neste diretório e emitir o seguinte comando jx. Supondo que
[Link] seja o arquivo de entrada para seu projeto [Link]:
Aqui você poderia ter usado qualquer outro nome de pacote em vez de index. Usamos o índice
porque queríamos manter nosso nome de arquivo principal como [Link]. No entanto, o comando acima
empacotará tudo e criará os dois arquivos a seguir:
• [Link] Este é o arquivo binário com o pacote completo que está pronto para ser enviado ao seu
cliente ou ao seu ambiente de produção.
Iniciando o arquivo JX
Considere que seu projeto original do [Link] estava sendo executado da seguinte forma:
Após compilar seu pacote usando o JXcore, ele pode ser iniciado da seguinte forma:
$ jx [Link] command_line_arguments
Para saber mais sobre o JXcore, você pode conferir seu site oficial.
140