SlideShare uma empresa Scribd logo
1 de 33
Node.js
Sistemas de Informação
Tópicos Avançados de Programação
2019.1
Bruno Catão
Criando um novo projeto
cd c:PastaOndeFicamSeusProjetos
md projetoAula2
cd projetoAula2
npm init
Criando um novo projeto
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible
defaults.
See `npm help json` for definitive documentation on these fields
and exactly what they do.
Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.
Press ^C at any time to quit.
Criando um novo projeto
package name: (aula2)
version: (1.0.0)
description: Projeto para a aula 2 de TAP
entry point: (index.js)
test command:
git repository:
keywords:
author: Bruno Catao
license: (ISC)
About to write to C:Usersbrunodevtap2019.1aula2package.json:
...
Is this OK? (yes)
Estrutura do projeto
Hello World
Executando
node index.js
Hello World
X
XXX
XXXXX
XXXXXXX
XXXXXXXXX
XXXXXXXXXXX
XXXXXXXXXXXXX
XXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
X
X
X
X
JSON + Programação Funcional
Executando
node index.js
TODOS OS PRODUTOS:
0. Coxinha R$ 4.00
1. Pastel R$ 3.00
2. Suco R$ 2.00
PRODUTOS DE MENOS DE R$ 3,00:
0. Pastel R$ 3.00
1. Suco R$ 2.00
AUMENTO DE 20% EM TODOS OS PRODUTOS:
0. Coxinha R$ 4.80
1. Pastel R$ 3.60
2. Suco R$ 2.40
Argumentos de linha de comando
Executando
node index.js arg1 arg2=valor arg4
0: C:Program Filesnodejsnode.exe
1: C:Usersbrunodevtap2019.1aula2index.js
2: arg1
3: arg2=valor
4: arg4
Objeto Process (https://nodejs.org/api/process.html)
• Eventos:
• beforeExit – Executar uma função antes de encerrar a execução
• Funções:
• abort() – Força a interrupção da execução imediatamente
• exit(valor) – Envia um sinal para o SO interromper o processo
• chdir() – Muda o diretório atual
• Atributos:
• arch – Exibe atributos da arquitetura de hardware
• argv – Objeto com os argumentos da linha de comando
• env – Objeto com as variáveis de ambiente
Listando arquivos de uma pasta
Executando
node index.js
Uso: node index.js CAMINHO_PARA_PASTA
node index.js .
index.js
package.json
Versão recursiva – percorre subpastas
Executando
node index.js C:Usersbrunodevtap2019.1
aula1:
mean_framework.ppt
aula2:
index.js
package.json
Lendo um arquivo – Funções assíncronas
Executando
node index.js README
Este é um arquivo de exemplo.
Ele contém várias linhas.
Para testar a leitura e gravação de arquivos.
Gravando um arquivo – Funções assíncronas
Executando
node index.js saida.txt
Dados gravados com sucesso.
type saida.txt
Dados que vão ser gravados
Exemplo Prático – Gravando objetos
Executando
node index.js
Dados gravados com sucesso.
type dados_produtos.json
[{"nome":"Coxinha","valor":4},{"nome":"Pastel","valor":3.5},{"nome":"S
uco","valor":2}]
Exemplo Prático – Lendo objetos
Executando
node index.js
0 - Coxinha - R$ 4.00
1 - Pastel - R$ 3.50
2 - Suco - R$ 2.00
Exemplo Prático #2 – Compactando arquivos
npm install archiver –save
npm notice created a lockfile as package-lock.json. You should commit
this file.
npm WARN aula2@1.0.0 No repository field.
+ archiver@3.0.0
added 51 packages from 28 contributors and audited 180 packages in
15.112s
found 0 vulnerabilities
• Vamos instalar um pacote no nosso projeto
• Para isso, utilizamos o comando “npm install <NOME_DO_PACOTE>”
• O argumento “—save” salva o pacote no arquivo package.json
Onde os pacotes são instalados ?
• Pacotes locais:
• Pasta node_modules do seu projeto
• Pacotes globais (npm install –g <PACOTE>):
• Pasta C:UsersUSUARIOAppDataRoamingnpmnode_modules
Instalamos um pacote e tem esse monte?
(isso tudo são as dependências do pacote archiver)
Compactando um arquivo
Executando
node index.js
434 bytes totais
Módulos
• Módulos são arquivos JavaScript ou pastas contendo arquivos;
• Importar módulos globais ou instalados pelo npm:
• require(NOME_DO_MODULO);
• Importar módulos criados pelo usuário (que estão no projeto):
• require('CAMINHO_RELATIVO_PARA_O_MODULO');
• Exemplo:
• require('fs');
• require('./util'); // Não precisa colocar a extensão .js
Novo módulo
Usando o módulo criado
Interface Gráfica para Desktop
• Há duas formas de criar aplicativos com interface gráfica em NodeJS
1. Utilizar bindings para QT ou GTK:
• node-qt (https://github.com/arturadib/node-qt)
• node-gui (https://github.com/yue/node-gui)
2. Frameworks que empacotam aplicações HTML5:
• NW.js (http://docs.nwjs.io/en/latest/)
• AppJS (http://appjs.com/)
• Há várias aplicações feitas com esses frameworks:
• Atom, Visual Studio Code, WhatsApp Desktop, Spotify, Popcorn Time
Para a próxima aula
• Valendo pontos na primeira avaliação
• O projeto valerá 5 pontos
• Os outros 5 pontos restantes serão um somatório das atividades propostas em sala
• Escreva um aplicativo que compacte uma pasta para um arquivo zip e descompacte
um arquivo zip para uma pasta
• Documentação do pacote archiver:
• https://archiverjs.com/docs/#quick-start
• Para descompactar, você pode usar o pacote extract-zip:
• https://github.com/maxogden/extract-zip
• Exemplo de uso:
• node meu_winrar.js compacta C:tempsubpasta C:temparquivo.zip
• node meu_winrar.js descompacta C:temparquivo.zip C:tempsubpasta

Mais conteúdo relacionado

Mais procurados

Introdução ao Node.js
Introdução ao Node.jsIntrodução ao Node.js
Introdução ao Node.jsEdgar Eler
 
Testes com javascript
Testes com javascriptTestes com javascript
Testes com javascriptLaís Lima
 
Nodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terNodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terEmerson Macedo
 
Containers PostgreSQL com a Crunchy Container Suite
Containers PostgreSQL com a Crunchy Container SuiteContainers PostgreSQL com a Crunchy Container Suite
Containers PostgreSQL com a Crunchy Container SuiteRoberto Mello
 
Django deploy - Como servir aplicações Django em produção
Django deploy - Como servir aplicações Django em produçãoDjango deploy - Como servir aplicações Django em produção
Django deploy - Como servir aplicações Django em produçãoArtur Felipe Sousa
 
Docker: um linux container engine
Docker:  um linux container engineDocker:  um linux container engine
Docker: um linux container engineHudson Brendon
 
Node.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançadoNode.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançadoEduardo Bohrer
 
C# 6.0 - Interopmix 2015
C# 6.0 - Interopmix 2015C# 6.0 - Interopmix 2015
C# 6.0 - Interopmix 2015Renato Groff
 
Otimizando sites com o nosql redis
Otimizando sites com o nosql redisOtimizando sites com o nosql redis
Otimizando sites com o nosql redisAllisson Azevedo
 
Nodejs justdigital
Nodejs justdigitalNodejs justdigital
Nodejs justdigitalJust Digital
 
Vagrant vs docker? Melhor vagrant + docker
Vagrant vs docker? Melhor vagrant + dockerVagrant vs docker? Melhor vagrant + docker
Vagrant vs docker? Melhor vagrant + dockerWellington Silva
 
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...Renato Groff
 
Uma visão rápida sobre Nodejs
Uma visão rápida sobre NodejsUma visão rápida sobre Nodejs
Uma visão rápida sobre NodejsRafael Soares
 

Mais procurados (19)

Introdução ao Node.js
Introdução ao Node.jsIntrodução ao Node.js
Introdução ao Node.js
 
Testes com javascript
Testes com javascriptTestes com javascript
Testes com javascript
 
Nodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terNodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis ter
 
Containers PostgreSQL com a Crunchy Container Suite
Containers PostgreSQL com a Crunchy Container SuiteContainers PostgreSQL com a Crunchy Container Suite
Containers PostgreSQL com a Crunchy Container Suite
 
Django deploy - Como servir aplicações Django em produção
Django deploy - Como servir aplicações Django em produçãoDjango deploy - Como servir aplicações Django em produção
Django deploy - Como servir aplicações Django em produção
 
Docker: um linux container engine
Docker:  um linux container engineDocker:  um linux container engine
Docker: um linux container engine
 
Node.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançadoNode.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançado
 
Jugvale
JugvaleJugvale
Jugvale
 
JEE nas nuvens: uma introdução ao openshift
JEE nas nuvens:  uma introdução ao openshiftJEE nas nuvens:  uma introdução ao openshift
JEE nas nuvens: uma introdução ao openshift
 
C# 6.0 - Interopmix 2015
C# 6.0 - Interopmix 2015C# 6.0 - Interopmix 2015
C# 6.0 - Interopmix 2015
 
Otimizando sites com o nosql redis
Otimizando sites com o nosql redisOtimizando sites com o nosql redis
Otimizando sites com o nosql redis
 
Nodejs justdigital
Nodejs justdigitalNodejs justdigital
Nodejs justdigital
 
Drupal + Rex
Drupal + RexDrupal + Rex
Drupal + Rex
 
Utilizando Docker para escalonar aplicações Node.Js
Utilizando Docker para escalonar aplicações Node.JsUtilizando Docker para escalonar aplicações Node.Js
Utilizando Docker para escalonar aplicações Node.Js
 
Docker + Django
Docker + DjangoDocker + Django
Docker + Django
 
Vagrant vs docker? Melhor vagrant + docker
Vagrant vs docker? Melhor vagrant + dockerVagrant vs docker? Melhor vagrant + docker
Vagrant vs docker? Melhor vagrant + docker
 
Introdução ao Nodejs
Introdução ao NodejsIntrodução ao Nodejs
Introdução ao Nodejs
 
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...
 
Uma visão rápida sobre Nodejs
Uma visão rápida sobre NodejsUma visão rápida sobre Nodejs
Uma visão rápida sobre Nodejs
 

Semelhante a Node.js Projeto Compactar e Descompactar Arquivos

NodeJS Under the Hood - Concurrency and Multithreading
NodeJS Under the Hood - Concurrency and MultithreadingNodeJS Under the Hood - Concurrency and Multithreading
NodeJS Under the Hood - Concurrency and MultithreadingRhuan Karlus Silva
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntDenis L Presciliano
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntDenis L Presciliano
 
Integração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlIntegração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlManuel Lemos
 
Integracao Contínua com CruiseControl e phpUnderControl
Integracao Contínua com CruiseControl e phpUnderControlIntegracao Contínua com CruiseControl e phpUnderControl
Integracao Contínua com CruiseControl e phpUnderControlDiego Tremper
 
Integração Contínua com Cruise Control e phpUnderControl
Integração Contínua com Cruise Control e phpUnderControlIntegração Contínua com Cruise Control e phpUnderControl
Integração Contínua com Cruise Control e phpUnderControlDiego Tremper
 
Programação Multiplataforma em Ambiente Web
Programação Multiplataforma em Ambiente WebProgramação Multiplataforma em Ambiente Web
Programação Multiplataforma em Ambiente WebIsrael Messias
 
Integração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlIntegração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlDiego Tremper
 
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como Código
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como CódigoCurso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como Código
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como CódigoGuilhermeJorgeAragod
 
TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?Rafael Benevides
 
ASP.NET 5 - Novidades do Desenvolvimento Web em .NET
ASP.NET 5 - Novidades do Desenvolvimento Web em .NETASP.NET 5 - Novidades do Desenvolvimento Web em .NET
ASP.NET 5 - Novidades do Desenvolvimento Web em .NETRenato Groff
 
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018Docker para Desenvolvedores .NET - .NET SP - Novembro-2018
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018Renato Groff
 

Semelhante a Node.js Projeto Compactar e Descompactar Arquivos (20)

NodeJS Under the Hood - Concurrency and Multithreading
NodeJS Under the Hood - Concurrency and MultithreadingNodeJS Under the Hood - Concurrency and Multithreading
NodeJS Under the Hood - Concurrency and Multithreading
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache Ant
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache Ant
 
Mean Stack
Mean StackMean Stack
Mean Stack
 
Java 08
Java 08Java 08
Java 08
 
Integração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlIntegração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControl
 
Integracao Contínua com CruiseControl e phpUnderControl
Integracao Contínua com CruiseControl e phpUnderControlIntegracao Contínua com CruiseControl e phpUnderControl
Integracao Contínua com CruiseControl e phpUnderControl
 
Consegi 2011: Puppet
Consegi 2011: PuppetConsegi 2011: Puppet
Consegi 2011: Puppet
 
Integração Contínua com Cruise Control e phpUnderControl
Integração Contínua com Cruise Control e phpUnderControlIntegração Contínua com Cruise Control e phpUnderControl
Integração Contínua com Cruise Control e phpUnderControl
 
Apache Ant
Apache AntApache Ant
Apache Ant
 
Precisamos falar sobre Gradle
Precisamos falar sobre GradlePrecisamos falar sobre Gradle
Precisamos falar sobre Gradle
 
Programação Multiplataforma em Ambiente Web
Programação Multiplataforma em Ambiente WebProgramação Multiplataforma em Ambiente Web
Programação Multiplataforma em Ambiente Web
 
Integração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlIntegração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControl
 
Curso de Node JS Básico
Curso de Node JS BásicoCurso de Node JS Básico
Curso de Node JS Básico
 
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como Código
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como CódigoCurso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como Código
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como Código
 
TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?
 
ASP.NET 5 - Novidades do Desenvolvimento Web em .NET
ASP.NET 5 - Novidades do Desenvolvimento Web em .NETASP.NET 5 - Novidades do Desenvolvimento Web em .NET
ASP.NET 5 - Novidades do Desenvolvimento Web em .NET
 
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018Docker para Desenvolvedores .NET - .NET SP - Novembro-2018
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018
 
[Node js] frameworks de testes end to-end baseados em nodejs
[Node js] frameworks de testes end to-end baseados em nodejs [Node js] frameworks de testes end to-end baseados em nodejs
[Node js] frameworks de testes end to-end baseados em nodejs
 
tutorial nagios
tutorial nagiostutorial nagios
tutorial nagios
 

Mais de Bruno Catão

Introdução às Redes Neurais - Parte 2/2
Introdução às Redes Neurais - Parte 2/2Introdução às Redes Neurais - Parte 2/2
Introdução às Redes Neurais - Parte 2/2Bruno Catão
 
Introdução às Redes Neurais - Parte 1/2
Introdução às Redes Neurais - Parte 1/2Introdução às Redes Neurais - Parte 1/2
Introdução às Redes Neurais - Parte 1/2Bruno Catão
 
React JS - Parte 2
React JS - Parte 2React JS - Parte 2
React JS - Parte 2Bruno Catão
 
React JS - Parte 1
React JS - Parte 1React JS - Parte 1
React JS - Parte 1Bruno Catão
 
Ionic 2/3 + Firebase
Ionic 2/3 + FirebaseIonic 2/3 + Firebase
Ionic 2/3 + FirebaseBruno Catão
 
Retina e Retinose Pigmentar
Retina e Retinose PigmentarRetina e Retinose Pigmentar
Retina e Retinose PigmentarBruno Catão
 
Introdução à MEAN Stack
Introdução à MEAN StackIntrodução à MEAN Stack
Introdução à MEAN StackBruno Catão
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScriptBruno Catão
 
Unity3d Space Shooter (Parte 1)
Unity3d Space Shooter (Parte 1)Unity3d Space Shooter (Parte 1)
Unity3d Space Shooter (Parte 1)Bruno Catão
 
Introdução ao Framework Grails
Introdução ao Framework GrailsIntrodução ao Framework Grails
Introdução ao Framework GrailsBruno Catão
 

Mais de Bruno Catão (20)

Introdução às Redes Neurais - Parte 2/2
Introdução às Redes Neurais - Parte 2/2Introdução às Redes Neurais - Parte 2/2
Introdução às Redes Neurais - Parte 2/2
 
Introdução às Redes Neurais - Parte 1/2
Introdução às Redes Neurais - Parte 1/2Introdução às Redes Neurais - Parte 1/2
Introdução às Redes Neurais - Parte 1/2
 
React JS - Parte 2
React JS - Parte 2React JS - Parte 2
React JS - Parte 2
 
React JS - Parte 1
React JS - Parte 1React JS - Parte 1
React JS - Parte 1
 
Ionic 2/3 + Firebase
Ionic 2/3 + FirebaseIonic 2/3 + Firebase
Ionic 2/3 + Firebase
 
Retina e Retinose Pigmentar
Retina e Retinose PigmentarRetina e Retinose Pigmentar
Retina e Retinose Pigmentar
 
Angular js
Angular jsAngular js
Angular js
 
Introdução à MEAN Stack
Introdução à MEAN StackIntrodução à MEAN Stack
Introdução à MEAN Stack
 
Web Offline
Web OfflineWeb Offline
Web Offline
 
Python 08
Python 08Python 08
Python 08
 
Python 07
Python 07Python 07
Python 07
 
Python 06
Python 06Python 06
Python 06
 
Python 05
Python 05Python 05
Python 05
 
Python 04
Python 04Python 04
Python 04
 
Python 03
Python 03Python 03
Python 03
 
Python 02
Python 02Python 02
Python 02
 
Python 01
Python 01Python 01
Python 01
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScript
 
Unity3d Space Shooter (Parte 1)
Unity3d Space Shooter (Parte 1)Unity3d Space Shooter (Parte 1)
Unity3d Space Shooter (Parte 1)
 
Introdução ao Framework Grails
Introdução ao Framework GrailsIntrodução ao Framework Grails
Introdução ao Framework Grails
 

Node.js Projeto Compactar e Descompactar Arquivos

  • 1. Node.js Sistemas de Informação Tópicos Avançados de Programação 2019.1 Bruno Catão
  • 2. Criando um novo projeto cd c:PastaOndeFicamSeusProjetos md projetoAula2 cd projetoAula2 npm init
  • 3. Criando um novo projeto This utility will walk you through creating a package.json file. It only covers the most common items, and tries to guess sensible defaults. See `npm help json` for definitive documentation on these fields and exactly what they do. Use `npm install <pkg>` afterwards to install a package and save it as a dependency in the package.json file. Press ^C at any time to quit.
  • 4. Criando um novo projeto package name: (aula2) version: (1.0.0) description: Projeto para a aula 2 de TAP entry point: (index.js) test command: git repository: keywords: author: Bruno Catao license: (ISC) About to write to C:Usersbrunodevtap2019.1aula2package.json: ... Is this OK? (yes)
  • 9. Executando node index.js TODOS OS PRODUTOS: 0. Coxinha R$ 4.00 1. Pastel R$ 3.00 2. Suco R$ 2.00 PRODUTOS DE MENOS DE R$ 3,00: 0. Pastel R$ 3.00 1. Suco R$ 2.00 AUMENTO DE 20% EM TODOS OS PRODUTOS: 0. Coxinha R$ 4.80 1. Pastel R$ 3.60 2. Suco R$ 2.40
  • 10. Argumentos de linha de comando
  • 11. Executando node index.js arg1 arg2=valor arg4 0: C:Program Filesnodejsnode.exe 1: C:Usersbrunodevtap2019.1aula2index.js 2: arg1 3: arg2=valor 4: arg4
  • 12. Objeto Process (https://nodejs.org/api/process.html) • Eventos: • beforeExit – Executar uma função antes de encerrar a execução • Funções: • abort() – Força a interrupção da execução imediatamente • exit(valor) – Envia um sinal para o SO interromper o processo • chdir() – Muda o diretório atual • Atributos: • arch – Exibe atributos da arquitetura de hardware • argv – Objeto com os argumentos da linha de comando • env – Objeto com as variáveis de ambiente
  • 13. Listando arquivos de uma pasta
  • 14. Executando node index.js Uso: node index.js CAMINHO_PARA_PASTA node index.js . index.js package.json
  • 15. Versão recursiva – percorre subpastas
  • 17. Lendo um arquivo – Funções assíncronas
  • 18. Executando node index.js README Este é um arquivo de exemplo. Ele contém várias linhas. Para testar a leitura e gravação de arquivos.
  • 19. Gravando um arquivo – Funções assíncronas
  • 20. Executando node index.js saida.txt Dados gravados com sucesso. type saida.txt Dados que vão ser gravados
  • 21. Exemplo Prático – Gravando objetos
  • 22. Executando node index.js Dados gravados com sucesso. type dados_produtos.json [{"nome":"Coxinha","valor":4},{"nome":"Pastel","valor":3.5},{"nome":"S uco","valor":2}]
  • 23. Exemplo Prático – Lendo objetos
  • 24. Executando node index.js 0 - Coxinha - R$ 4.00 1 - Pastel - R$ 3.50 2 - Suco - R$ 2.00
  • 25. Exemplo Prático #2 – Compactando arquivos npm install archiver –save npm notice created a lockfile as package-lock.json. You should commit this file. npm WARN aula2@1.0.0 No repository field. + archiver@3.0.0 added 51 packages from 28 contributors and audited 180 packages in 15.112s found 0 vulnerabilities • Vamos instalar um pacote no nosso projeto • Para isso, utilizamos o comando “npm install <NOME_DO_PACOTE>” • O argumento “—save” salva o pacote no arquivo package.json
  • 26. Onde os pacotes são instalados ? • Pacotes locais: • Pasta node_modules do seu projeto • Pacotes globais (npm install –g <PACOTE>): • Pasta C:UsersUSUARIOAppDataRoamingnpmnode_modules Instalamos um pacote e tem esse monte? (isso tudo são as dependências do pacote archiver)
  • 29. Módulos • Módulos são arquivos JavaScript ou pastas contendo arquivos; • Importar módulos globais ou instalados pelo npm: • require(NOME_DO_MODULO); • Importar módulos criados pelo usuário (que estão no projeto): • require('CAMINHO_RELATIVO_PARA_O_MODULO'); • Exemplo: • require('fs'); • require('./util'); // Não precisa colocar a extensão .js
  • 32. Interface Gráfica para Desktop • Há duas formas de criar aplicativos com interface gráfica em NodeJS 1. Utilizar bindings para QT ou GTK: • node-qt (https://github.com/arturadib/node-qt) • node-gui (https://github.com/yue/node-gui) 2. Frameworks que empacotam aplicações HTML5: • NW.js (http://docs.nwjs.io/en/latest/) • AppJS (http://appjs.com/) • Há várias aplicações feitas com esses frameworks: • Atom, Visual Studio Code, WhatsApp Desktop, Spotify, Popcorn Time
  • 33. Para a próxima aula • Valendo pontos na primeira avaliação • O projeto valerá 5 pontos • Os outros 5 pontos restantes serão um somatório das atividades propostas em sala • Escreva um aplicativo que compacte uma pasta para um arquivo zip e descompacte um arquivo zip para uma pasta • Documentação do pacote archiver: • https://archiverjs.com/docs/#quick-start • Para descompactar, você pode usar o pacote extract-zip: • https://github.com/maxogden/extract-zip • Exemplo de uso: • node meu_winrar.js compacta C:tempsubpasta C:temparquivo.zip • node meu_winrar.js descompacta C:temparquivo.zip C:tempsubpasta