Executando verificação de segurança...
2

Meu Setup para API's Node.js

Meu Setup para criar uma api node.js

Existem diversos vídeos e tutoriais ensinando a criar uma api com Node.js, mas se tem uma coisa que nenhuma delas tem em comum é o Setup. Não adianta, podemos utilizar os mesmos frameworks, as mesmas bibliotecas, mas cada vez que iremos iniciar um projeto do zero faremos de uma maneira diferente.

Hoje eu trago pra vocês como eu faço o setup das minhas api's Node.js com Typescript, Prisma e Swagger

O inicio

O Node.js é tão versátil que nem o início é padronizado, dá pra começar de vários jeitos, sério! 😮

Eu faço criando um repositório no github e fazendo o clone dela, gosto assim porque não tenho que me preoculpar com .gitignore nem nada do tipo, mas o principal aqui para começar é ter uma pasta para o projeto.

Depois que eu já tenho a pasta eu a abro no VS Code e uso o terminal de dentro do editor.

Vamos lá, COMANDOS!

  • npm init

Sim, eu uso o npm, já tive muitos problemas com o Yarn, eu sei que é mais rápido, mas ainda prefiro o npm, principalmente no backend.
E sim, eu faço os input dos dados linha a linha, nada de npm init -y 🤗

Typescript

  • npx tsc --init
  • npm i typescript tsx -D

Ultimamente tenho utilizado o tsx pra rodar meu servidor typescript mas já utilizei muito o ts-node-dev
Repararam que eu uso -D ao invés de --save-dev? herdei isso do yarn, funciona.
Agora o meu tsconfig.json

{
	"compilerOptions": {
		"target": "ES2020",
		"module": "commonjs",
		"lib": ["ESNext"],
		"sourceMap": true,
		"outDir": "./dist",
		"strict": true,
		"esModuleInterop": true,
		"skipLibCheck": true,
		"forceConsistentCasingInFileNames": true
		}
}

É isso :)

Express e servidor

Mais comandos:

  • npm i express dotenv cors
  • npm i @types/node @types/express @types/cors -D

Agora vamos para um pouquinho de código, mas antes vamos criar a famosa pastinha src.
Dentro de src eu crio um arquivo app.ts
E meu arquivo app.ts fica assim:

import cors from "cors";
import express, { Express } from "express";

export const createApp = async (): Promise<Express> => {
    const app = express();

    app.use(express.json());
    app.use(cors());


    return app;
};

É sempre bom deixar o arquivo que dá o start na aplicação (nesse caso meu index.ts) bem clean, por isso separo (app.ts e index.ts) o que geralmente é feito em um único arquivo só.
E meu arquivo index.ts fica assim:

import { config } from  "dotenv";
import { createServer } from  "http";
import { createApp } from  "./app";

config();

const  port  =  process.env.PORT  ||  3000;

const  start  =  async () => {
    const  app  =  await  createApp();
    
    const  server  =  createServer(app);

    server.listen(port, () => {
        console.log("Server listening on port:", port);
    });
};

start();

Com isso aqui já estamos prontos pra sair codando e criar uma api, mas eu prometi mostrar mais coisas

Swagger

Uma api PRECISA de um documento, eu falo isso agora, mas eu já criei muita api sem documento nenhum, só depois que eu tive que refatorar uma api sem documentação que tinha quase 200 endpoints (sim, acredite!) eu passei a valorizar o querido Swagger. Então vamos voltar pros comandos!

  • npm i yamljs swagger-ui-express

Eu crio um arquivo, geralmente chamado openapi.yaml na pasta raiz, configuro ele todo usando o padrão Open Api 3.0 (https://editor.swagger.io/) e importo ele no app.ts

finalmente meu app.ts fica assim:

import cors from "cors";
import express, { Express } from "express";
import swaggerUI from "swagger-ui-express";
import yaml from "yamljs";

export const createApp = async (): Promise<Express> => {
    const app = express();

    app.use(express.json());
    app.use(cors());
    
    const swaggerDocument = yaml.load("./openapi.yaml");
    app.use("/", swaggerUI.serve, swaggerUI.setup(swaggerDocument));

    return app;
};

Agora temos na rota / da nossa api a documentação necessária.

Vamos falar de banco de dados?

Prisma

Se você usa Node.js + Typescript você precisa conhecer o Prisma, já usei Sequelize, TypeORM, mas o prisma deixa tudo muito mais fácil, começando pelo setup

  • npm i prisma -D
  • npx prisma init --datasource-provider sqlite

Nesse caso vou mostrar usando o sqlite, mas geralmente eu uso com Postgres

Depois desse ultimo comando será gerado uma pasta chamada prisma, onde irá conter as nossas migrations e o schema do nosso banco

Eu edito o schema.prisma inserindo as tabelas que eu quero no banco e dou meu migrate
(saiba mais em: https://www.prisma.io/migrate)

  • npx prisma migrate dev --name init

Agora é só criar nossos Controllers e trabalhar com o Prisma, mas isso eu vou deixar para um próximo post ;)

Bônus: prisma-erd-generator

Que tal gerar um Diagrama entidade relacionamento automaticamente a cada migrate? Maneiro né?!

  • npm i -D prisma-erd-generator @mermaid-js/mermaid-cli

Agora basta adicionar o seguinte código no schema.prisma

generator erd { provider = "prisma-erd-generator" }

E pronto, a cada migrate ou npx prisma generate será gerado um svg do seu diagrama.

E aí, o que acharam?
Vocês fazem diferente?
Me conta aqui nos comentários :)

Carregando publicação patrocinada...
1

Tenho uma boa noção em JS então estou iniciando no NODEJS, mas estou meio perdido rsrsrs, a estrutura de um projeto fica bém complexa a medida que vou instalando dependecias ou biblioteca. Comecei a seguir alguns tutoriais mas chega a um ponto que olho para o projeto e nem lembro o que determinado arquivo tem de ligação com o outro.
Você tem alguma dica ?

Meu site, onde compartilho alguns projetos desenvolvidos: https://alefsantos.online/

1
1