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

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   Build your first Node.js microservice  How To Do Microservices with Node.js  senecajs is a microservices toolkit for 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!  7 tips for a Node.js padawan 6 Tips and Techniques to Speed Up and Improve Your Node.js Performance 10 Node.js Best Practices: Enlightenment from the Node Gurus 8 Tips to Build Better Node.js Apps in 2018