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 import
e import()
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!