PplWare Mobile

Node.js: Aprenda a instalar e a desenvolver a primeira app

                                    
                                

Este artigo tem mais de um ano


Autor: Pedro Pinto


  1. Yordanov says:

    Esta framework é cada vez mais e mais utilizada…
    Óptimo artigo para “Primeiros Passos”

  2. Thefura says:

    Tutoriais são sempre bem-vindos 🙂

  3. pedrov says:

    Um tutorial “helo world” é sempre útil e didático, mas fazer um site completo em nodejs é outra história…. javascript é uma linguagem com sérias limitações em algumas aplicações e nodejs só é rápido em aplicações puramente de IO, ou seja desde que não se tenham funções no servidor a puxar pelos CPUs. Quem quer ter trabalho nesta área , ou ter acesso a uma linguagem e programação “à séria” é melhor optar por aprender asp.net ou java ee . Ambas permitem criar aplicações web bem estruturadas e fáceis de manter e escalar. A MS está a lançar uma versão open source de asp.net : a asp.net core.

    • Pedro says:

      Lol já não deves olhar para javascript desde 19 e troca o passo…

      Aplicações web escaláveis com asp.net ou java ee deve ser para dar umas risadas eheh
      As aplicações hoje em dia escalam horizontalmente e não verticalmente…

      Deixa o dogma de parte e aprende javascript à séria, vais perceber porque hoje em dia as grandes empresas estão a entrar neste barco 😉

      • pedrov says:

        Na minha opinião nodejs permite algumas coisas interessantes em alguns contextos , mas usando a analogia do barco ainda tem que remar muito para chegar ao nível de asp.net e java. E o pior é que sendo o nodejs baseado numa linguagem de scripting é um barco lustroso e bonito mas furado. E de facto eu fiz umas coisas em javascript nos anos 90 e recentemente voltei a fazer, mas continuo a não gostar…
        As grandes empresas ? depende do que entende por grandes empresas… não estou a ver as grandes empresas que precisam de uma solidez inabalável ( seguradoras, bancos, serviços estatais ) a deixar asp.net ou java ee para mudar para node.js. Mas se conhecer alguma diga qual.

        • Pedro says:

          Seguradoras, serviços estatais e bancos são empresas de solidez inabalável? LOL

          Mude o paradigma dos anos 50, veja google, apple, amazon, facebook, yahoo, ebay, walmart e o que eles estão a fazer com javascript.

        • Henrique says:

          Depende do que estás a falar!

          Comparar essas duas tecnologias que são mais indicadas para software empresarial com JavaScript que é mais para web, não tem mesmo nada a ver!

          Quem não vê isto, realmente não percebe nem de um lado, nem de outro!

    • Narco says:

      Desenvolvo software cliente/servidor maioritariamente em Java, ao principio era cético em relação a framework Node JS por ser em javascript. Mas depois de começar a mexer fiquei rendido.

      Espero que saiba do que fala, uma das principais vantagens do Node JS é não ser bloqueante, um processo não impede que outro se execute.
      Quando fala “ou seja desde que não se tenham funções no servidor a puxar pelos CPUs”, teoricamente a vantagem é mesmo essa do Node JS, acontece com o java que quando uma operação bloqueia a execução de outros e o processador esta a ser desaproveitado, como Node JS é não bloqueante você acaba pro ver o processador a processar perto dos seu máximo, mas isso não o é necessariamente mão pelo contrario é bom, os recursos da maquina estão a ser aproveitados ao máximo para executar mais processos em simultâneo.

      Cumprimentos

      • pedrov says:

        Eu sei exactamente do que falo . O que não é “bloqueante” são as chamadas IO (comunicações) , mas para processos intensivos (entenda-se cálculos ) , como nodejs corre só numa thread acaba por perder em relação ás frameworks que aceitam vários processos em simultâneo. Tudo depende do que se quer fazer, acho que o nodejs é óptimo para aplicações que trabalham dados em directo como chats, data reporting etc. Mas experimente-se num contexto em que o servidor tem que receber periodicamente alguns MB de dados numéricos e elaborar cálculos complexos e lançar o output numa base de dados. Logo aí tinhamos um problema de boqueio que nos levava a uma utilização plena do CPU. Em c# ou java era só abrir um processo (thread) para processar os dados e deixar outro aberto para manter a comunicação e o servidor a responder aos restantes pedidos e executar outras tarefas paralelas. Depois há o problema de que javascript é simplesmente uma má linguagem para cálculos ( julgo que aqui será difícil discordar comigo).

        • pedrov says:

          ps: retribuo os cumprimentos e convido-o a ver o meu comentário mais abaixo sobre a maravilha que é programar em javascrip no contexto matemático sem type checking. Somar 1+manuel em javascript resulta em ” 1manuel” e nem um aviso recebe por tentar somar um número com um string.

          • Pedro says:

            Não seja ingénuo… Aplicações monolíticas são algo do passado, não existem sistemas realmente distribuídos e escaláveis escritos apenas numa linguagem.

            Não tem noção do que é feito hoje em dia usando nodejs, não tem mal, muita gente desconhece, mas basta procurar um pouco e vai ficar espantado.

            Não fique preso nos anos 50, os paradigmas de programação evoluíram. Se quiser construir algum software distribuído, com instancias aqui, na china, us, etc o seu paradigma não funciona. As tais empresas que o senhor considera inabaláveis estão perdidas no tempo, não conseguem atualizar-se e estão a ruir…

            Hoje em dia querem-se máquinas baratas e aos milhares, não um supercomputador com 1 aplicação a correr o seu querido java ee (ainda se fosse spring…).

            O nodejs veio ajudar a colmatar esta falha, basta um computadorzeco para ter um servido web capaz de responder a milhares de pedidos por segundos. Ou então em paradigmas machine2machine é também espectacular.

            Aconselho-o a ler um pouco mais sobre o tema, se não gosta de javascript tudo bem, mas devia aprofundar os seus conhecimentos sobre como criar uma verdadeira aplicação distribuída.

        • Pedro says:

          Se realmente estás a fazer cálculos gigantes então sugiro que não uses nodejs ora pois claro.

          Mas se tiveres uma arquitectura decente na tua aplicação vais ter micro-serviços, simplesmente envias essa mensagem para ser tratada num serviço de tratamento de dados (feito em java, matlab, python, etc) e quando o processo acabar retomas onde estavas.

          E no entretanto não bloqueaste em nada o teu servidor.

          Se tens cálculos assim tão intensivos para fazer e estás simplesmente a abrir uma thread em que vais partilhar os teus recursos com um processo que vai “mamar” o CPU e memória toda…. boa sorte.

          • pedrov says:

            Ok Pedro, era isso mesmo que eu queria dizer. O nodejs é uma maravilha de produtividade em cenários simples ( lojas online, blogs, data reporting) mas em contextos mais exigentes não é funcional ou seja: obriga a usar outra framework para processar os dados com alguma agilidade e com padrões de programação mais formais . Mais vale fazer tudo numa só linguagem/framework que permita executar tudo . Em relação ás frameworks java e .net a grande vantagem é que se pode ter um controlo muito preciso das threads, ou seja pode-se dividir as tarefas pelos processos e balancear em cada momento a carga conforme os recursos da máquina/servidor que se tenha disponível deixando obviamente a máquina sempre num estado que permita um grau mínimo de resposta para outras tarefas.

        • Marco says:

          Nodejs pode correr em varias threads.

  4. jedi says:

    Ainda bem, iniciaram esta rubrica/ tutorial. Que cada vez tem ganho mais adeptos em desenvolver web apps nesta plataforma sem estar dependente doutras como php, java, .NET (C# / VB), etc.

    Espero que continuem com a sequela.

    Outra em crescente é python. 😉

    • jedi says:

      Eu por acaso utilizo mais OS X. Mas penso que deviam ter abrangido o windows, que como sabem tem muitos mais utilizadores.

      • Player says:

        Quem quer desenvolver software deve estar preparado para usar o SO que for preciso.

        • jedi says:

          Mas trabalhar / instalar NodeJs em sistemas Unix, é banal. Ainda para mais com se trabalha com linha de comandos quando utiliza-se NPM, porque é bash. Já em windows …. !!!! ;(

          • pedrov says:

            Instalar nodejs em windows é mesmo muito fácil e instalar pacotes com npm também. E o servidor arranca da linha de comandos da mesma forma como indicado no tutorial para linux. Apesar de não ir à bola com a linguagem javascript reconheço que em windows, o nodejs com seu servidor integrado é a forma mais rápida de colocar um servidor em acção. Todas as outras frameworks web obrigam a configurar um servidor iis, apache ou nginx que ás vezes são uma valente dor de cabeça.

  5. Sergio says:

    Apenas uma dica: para desenvolvimento de aplicações web para um elevado número de utilizadores, dados em tempo real, requisito de uma % elevada de disponibilidade, altamente escalável, etc, recomendo a seguinte combinação: meteor com react js mongodb e semantic ui.
    Bons desenvolvimentos 🙂

  6. Vitor Jesus says:

    Boa. Num próximo tutorial podiam mostrar o express (e mostrando como se usa o npm).

  7. Joe Fagundes says:

    Obrigado.
    O NodeJS deixou de ser enigmático para mim depois de ler este artigo.

  8. gFan says:

    Muito bom artigo, gostei 🙂

  9. Pedro says:

    Querem aprender nodejs? Vão a este site: http://nodeschool.io/

    Muitos tutoriais simples e super interessantes. Vão perceber porque esta linguagem tem estado a ganhar milhões de adeptos por todo o mundo e porque muitas empresas estão a deixar o legacy java ou c#, e adoptar node para criar sistemas verdadeiramente escaláveis e simples. E já agora acabam com o cancro da programação por objectos também!

    Se querem apostar em desenvolvimento web sugiro o hapi.js: http://hapijs.com/

    • pedrov says:

      Não se deve usar uma chave de fendas para bater pregos nem um martelo para aparafusar… o nodejs é bom para algumas coisas mas não serve para tudo. e tem algums problemas derivados não só da linguagem javascript mas pelo facto de ainda ser jovem ( lançada em 2009) . Garanto que não vamos ver nenhum banco a correr nodejs nos seus servidores nos próximos tempos…
      Já agora : javascript também implementa programação por objetos por isso essa declaração de ódio à programação por objetos não faz sentido.
      PS: respeito todas as opiniões mas discordo que a programação por objetos seja um cancro, muito pelo contrário.

      • pedrov says:

        já agora, em javascript não há type checking, ou seja para definir uma vareável numérica ou um string usa-se indistintamente o var:

        var pi = 3.14;
        var person = ” texto”;

        e depois experimentem fazer : var s = pi+person = 3.14texto;
        porreiro não? Em java ou c# soava logo o alarme, em javascript é na boa, imagine-se os problemas que isso pode criar. É só rir não é? já se está a ver como será manter uma base de código fonte de milhares de linhas onde nem sequer se percebe qual o tipo de variáveis. E se algum desgraçado tiver que rever o código de outro programador … yep boa sorte sorte com isso.

        • Pedro says:

          Se quiser tipos veja typescript.

          Mas se a sua empresa tiver boas políticas de code review, TDD, testes de integração verá que esses erros não surgem.

          Estamos a falar de programação ao nível profissional, não de hobbies.

        • andcoe says:

          Boas pedrov, supostamente isso não deve acontecer porque antes de cometeres essa calamidade tens de escrever um testezito para esse bocado de codigo em especifico. Os devs de JS normalmente não cometem esses erros basicos e têm boas praticas de desenvolvimento que permitem manter algum controlo sobre o dinamismo da linguagem que é brilhante!

        • Joao Peixoto says:

          pedrov, cada vez que leio um comentário teu mais me convenço que não percebes um boi de programação.
          Sou do tempo de C, que tenho que declarar tudo e mais alguma coisa senão borra-se todo. pior, é que fazia no meu pc, funcionava, ia para o da universidade pimba deixava de funcionar…qualquer um que trabalhe com C, percebe o que estou a dizer. trabalho actualmente com uma linguagem que é como o javascript que não é preciso declar o tipo de variavel, o que faço é quando somo duas variaveis “sensiveis” ou a BDs externas que nao controlo, uso funciones do genero tostring() ou tointerger() para garantir que o resultado final seja o que quero. em milhares de linhas que ja fiz nunca tive um problema que referes. deves ser muito distraido para nao saber o que andas a somar.
          quanto ao javascript também implementar programação por objectos é pra rir não é? O C também da para criar programas por objectos (da mais trabalho visto que nao é uma linguagem criada para o fazer), mas a linguagem continua a ser procedural. já o contrario não é verdade, numa linguagem OOP, tenta fazer um programa com algoritmo procedural.
          quanto ao node.js vs java vs watherver…criar chats, e afins (IO), é muito mais rápido usar o node.js, e como referes java como é multithreading consegue consumir menos processador em calculos pesados. a questão é..quantas vezes é que é preciso fazer os tais calculos pesados….e sinceramente so devem existir umas centenas de clientes (bancos e afins) que precisem disso, todos os outros milhares de clientes conseguem tirar melhor proveito do node.js. problema é que se da java nas universadades e sai-se de la a pensar que aquilo é a melhor coisa do mundo…palas…enfim…

          • pedrov says:

            Eu que é não percebo nada de programação certo? Um código fonte em C bem escrito e dentro do padrão (ANSI C) compila e corre em qualquer computador dos últimos 20 anos sem grandes problemas. Se te incomoda declarar os tipos de variável é porque não trabalhas com algoritmos complexos . Essa de usar tostring() e tointeger() para garantir que não estoure é melhor que usar tipos logo de início e manter um formalismo mínimo?
            Quando fazes doces usas açucar ou sal? é que são parecidos : ambos são granulados e brancos… o problema é que o sabor não é mesmo e é por isso que convém teres os recipientes bem marcados com “sal” e “açucar”…. na lógica do javascript pegas numa caixa ao calhas e de vez em quando (uns milhares de linhas á frente) metes o dedo para confirmar se ainda é doce.
            ps: Eu trabalho em investigação científica e por isso estou mais interessado em proteger o rigor dos cálculos do que em pôr e tirar JSONS de uma base de dados com uma página web cheia de bonecada a flutuar no ecrã…daí a minha preferência por C# e Java. Entendo que o nodejs seja excelente em certos contextos mas não lhe vejo a mesma flexibilidade tal como está.

          • Vitor Jesus says:

            Pedro, até podes perceber de programação, mas o mundo da programação mudou muito. Um sistema hoje em dia já não é uma entidade monolítica, todo feito numa linguagem, a correr num único servidor. Nos últimos anos conto pelos dedos os sistemas onde intervi em que apenas tinha uma linguagem.

            Se eu fosse fazer um módulo de cálculo, provavelmente também o faria em C# ou Java, mas mesmo aqui, teria que ter muito cuidado para garantir que as contas ficariam bem (divisões de doubles por ex.).
            Mas o teu exemplo é apenas um caso de um sistema muito focado numa actividade específica e contida. Já fiz uns tantos motores de cálculo baseados em várias linguagens, incluindo JS.

            Posso-te garantir que há bancos a utilizarem JS nos servidores, falo por experiência própria. Se há uns anos propusesse implementar algo em JS diriam que era parvo e maluco e que JS é apenas para tratar de forms (e disseram). No entanto, passado uns anos, os sistemas continuam a funcionar, com muito JS a garantir o seu funcionamento.

    • JL says:

      Já utilizo o Node.JS. Criei um pequeno web server com webservices antes de começar a usar o HapiJS.
      Para muitos, a programação assíncrona e/ou por “promises” pode ser um pouco complicado, mas depois de algum esforço os resultados aparem.

  10. Sericaia says:

    Para aprender apareçam no Nodeschool International Day, dia 21 de Maio, no IST 🙂

    Links relevantes:
    http://www.meetup.com/require-lx/events/229064760/ (Inscrição)
    nodeschool.io/international-day/

  11. Vítor Nóbrega says:

    Bom artigo. Podiam fazer um artigo sobre o JHipster (Web app com Java + Angular). Permite ter uma aplicação web em poucos segundos, preparada para um ambiente de produção. Só o tempo de configurações que isto permite reduzir……

  12. sakura says:

    OK no edge e (W10_SubSystemUbuntu)<– ou seja la o que é. build.(14342).

    para o helo w,,, serve.

  13. Alberto says:

    Seria interessante ver um tutorial a abordar escalabilidade(vertical ou horizontal) usando multithreading(Cluster, por exemplo), balancadores de carga (nginx ou haproxy, por exemplo)e algum NoSQL database como o Redis, não sei se existe, outras técnicas, mas gostava de poder aprender, caso existam. Acredito que há bastante gente interessada no assunto. Abraço

  14. Az8teiro says:

    Para mim, programação web/net é html/css e dependendo que se quer, do objectivo é python/php por trás.

  15. Modem says:

    Podiam ter explicado o que fazia cada uma das linhas no exemplo do servidor.

  16. j-n-c says:

    Apenas um comentário acerca do passo de instalação do NodeJS.
    Apesar do método de instalação apresentado (usando repositório apt do UBUNTU) funcionar, ser uma versão estável e poder ser suficiente para início do desenvolvimento de aplicações, geralmente a versão disponível nos respositórios das distribuições Linux não é a versão estável mais recente.
    Para obter a versão estável mais recente pode ser usado o método de instalação alternativo:

    1. Consultar o valor major do pacote LTS do nodeJS disponível no site do nodeJS: https://nodejs.org/en/ (neste momento a versão LTS, é a 8.11.1, pelo que a Major do pacote será: 8)

    2. Adicionar o PPA para acesso aos pacotes NodeSource

    cd ~
    curl -sL https://deb.nodesource.com/setup_8.x -o nodesource_setup.sh
    sudo bash nodesource_setup.sh

    3. Instalar a versão mais recente do nodeJS:

    sudo apt install nodejs

    NOTA: Este pacote contém o NodeJS e o npm, pelo que não é necessário realizar a intalação do npm.

    Ficam ainda dois links que uso na instalação e preparação para ambiente de produção de NodeJS:
    https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-ubuntu-16-04
    https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-ubuntu-16-04

    À parte deste comentário, parabém pelo artigo. É um bom “starter point”

Deixe um comentário

O seu endereço de email não será publicado.

You may use these HTML tags and attributes: <a href="" title="" rel=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

Aviso: Todo e qualquer texto publicado na internet através deste sistema não reflete, necessariamente, a opinião deste site ou do(s) seu(s) autor(es). Os comentários publicados através deste sistema são de exclusiva e integral responsabilidade e autoria dos leitores que dele fizerem uso. A administração deste site reserva-se, desde já, no direito de excluir comentários e textos que julgar ofensivos, difamatórios, caluniosos, preconceituosos ou de alguma forma prejudiciais a terceiros. Textos de caráter promocional ou inseridos no sistema sem a devida identificação do seu autor (nome completo e endereço válido de email) também poderão ser excluídos.