5 dicas para criar melhores aplicações usando Node.js

Em:

Neste artigo, recolhemos algumas dicas que achamos que os desenvolvedores Node.js podem seguir. Sinta-se livre para brincar e aprender com as dicas abaixo.

#1: Comece a usar async – await

Async — await chegou no Node 8 como um boom. E isso mudou a maneira como lidamos com eventos assíncronos e simplificou as incompreensíveis bases de código que existiam até então. Se você ainda não está usando async — await, leia as postagens JavaScript Assíncrono — Introdução e Async Await, JS assincronamente síncrono no nosso blog.

Atualizando seu conhecimento sobre a programação assíncrona, nossa postagem sobre Promises no JavaScript também pode ajudar.

const axios = require("axios");

async function requestUserData() {
  try {
    const userPromise = axios("https://randomuser.me/api/");
    const namePromise = axios("https://uinames.com/api/");

    /* Aguardando as duas promises retornarem
     * para armazenar o resultado em nossas próprias variáveis
     */
    const [randomUser, randomName] = await Promise.all([
      userPromise,
      namePromise
    ]);

    console.log(randomUser.data, randomName.data);
  } catch (e) {
    console.error(e); // error
  }
}

requestUserData();

#2: Familiarize-se com importimport()

ES modules são amplamente usados com transpilers ou com a lib @std/esm. Eles são suportados nativamente desde o Node.js 8.5 com a flag --experimental-modules, mas ainda há um longo caminho até se tornarem estáveis para rodar em produção.

Sugerimos que você aprenda as bases atuais e continue acompanhando o progresso em 2018. Você pode encontrar um tutorial de ES modules simples com o Node.js no blog do Dr. Axel Rauschmayer.

// --util.js--
export default function sum(...numbers) {
  return numbers.reduce((total, value) => total + value);
}

// --test.js--
import sum from "./util";

console.log("== Using sum method from file ==");
console.log("SUM =", sum(1, 2, 3)); // 6

// try import()
button.addEventListener("click", event => {
  import("./modal.js")
    .then(modal => {
      modal.open();
    })
    .catch(error => {
      /* Error handling */
    });
});

#3 Proteja suas aplicações Node.js

São grandes e numerosas as brechas de segurança e novas vulnerabilidades encontradas todos os anos e 2017 não foi exceção. Segurança é um tópico em rápida mudança que não pode ser ignorado. Para começar a entender como manter suas aplicações Node.js seguras, leia 13 boas práticas para tornar segura uma aplicação com Node.js.

#4: Adote o uso de microservices

Se você tiver problemas de implantação ou projetos de grande escala, talvez seja hora de adotar a arquitetura dos microservices. Aprenda sobre as duas ferramentas abaixo para se manter atualizado na cena dos microservices de 2018.

Kubernetes is an open-source system for automating deployment, scaling, and management of containerized applications.

Docker is a software technology providing containers, which wrap up a piece of software in a complete filesystem that contains everything it needs to run: code, runtime, system tools and system libraries.

Antes de se aprofundar em containers e orchestration, você pode ir melhorando seu código existente. Siga a metodologia da aplicação de 12 fatores e você terá um tempo muito maior para fazer containers e deploy dos seus serviços.

Dicas rápidas sobre miscroservices com Node.js

#5: Torne-se familiar com HTTP/2

HTTP/2 está disponível desde o Node.js 8.8 sem o uso de flag. Ele tem push e multiplexação do servidor, que abre caminho para o carregamento de módulos nativos eficientes aos navegadores. Alguns frameworks, como Koa e Hapi, o suportam parcialmente, enquanto alguns outros, como Express e Meteor, estão trabalhando no suporte.

O HTTP/2 já não é um experimento desde o Node.js 9.0.0. Você pode aprender mais sobre o tópico na maravilhosa Introdução ao HTTP/2 no blog Web Fundamentals do Google.

// --http2-server.js--
const http2 = require("http2");
const fs = require("fs");
const path = require("path");
const utils = require("./utils");

const { HTTP2_HEADER_PATH } = http2.constants;

const server = http2.createSecureServer({
  cert: fs.readFileSync(path.join(__dirname, "/server.crt")),
  key: fs.readFileSync(path.join(__dirname, "/key.pem"))
});

function push(stream, path) {
  const file = utils.getFile(path);
  if (!file) {
    return;
  }
  stream.pushStream({ [HTTP2_HEADER_PATH]: path }, pushStream => {
    pushStream.respondWithFD(file.content, file.headers);
  });
}

server.on("stream", (stream, headers) => {
  push(stream, "/assets/main.js");
  push(stream, "/assets/preset.css");
  push(stream, "/assets/base.css");

  const file = utils.getFile("/index.html");

  // Serve file
  stream.respondWithFD(file.content, file.headers);
});

server.listen(3000);
// --utils.js--
"use strict";
const fs = require("fs");
const mime = require("mime");

module.exports = {
  getFile: function(path) {
    const filePath = `${__dirname}/public${path}`;

    try {
      const content = fs.openSync(filePath, "r");
      const contentType = mime.lookup(filePath);
      return {
        content,
        headers: {
          "content-type": contentType
        }
      };
    } catch (e) {
      console.log('error => ', e)
      return null;
    }
  }
};

Se você quiser ver esse código completo, acesse o repositório http2-server-push-example no GitHub.

Qual é a sua dica para desenvolvedores Node.js?

O que mais você recomendaria aos seus colegas desenvolvedores do Node.js para obterem maior sucesso com suas aplicações em 2018? Deixe sua opinião na seção de comentários!

Cursos recomendados pela BrazilJS

    • BRJS2017: Confira como foram as palestras da tarde do primeiro dia

      Palestrando pela segunda vez na BrazilJS, Jean Carlo Emer (@jcemer) falou sobre Types and Immutability: why you should care. Ele disse que esse é “o assunto mais relevante do momento”, e ainda alertou: JS é uma linguagem dinâmica e fracamente tipada. – Tipos sempre foram uma dor de cabeça em JS – afirmou, antes de […]

    • Flick – Uma nova unidade de tempo criada pelo Facebook

      É isso mesmo, não é um novo produto ou rede social, o Facebook acabou de anunciar uma nova unidade de tempo 😱😱😱

    • Weekly #180 – ECMAScript e mais ECMAScript, Palestra Mkt Digital e CFP CEJS

      A BrazilJS Weekly é a seleção semanal que reúne as novidades sobre o desenvolvimento Web no Brasil e no mundo. Ainda não é inscrito? Faça o seu cadastro e receba nossa Newsletter semanal 😎👊🙂👌👍 Sugira conteúdo para a Weekly usando o nosso canal de issues no Github. Um agradecimento especial aos 16 colaboradores da edição […]

    Patrocinadores BrazilJS

    Gold

    Silver

    Bronze

    Apoio

    BrazilJS® é uma iniciativa NASC.