NestJs
Nestjs é um framework voltado para construção de aplicações nodejs de forma performática e escalável. Possui suporte a diferentes paradígmas de programação tais como programação orientada a objetos e funcional dando um toque de flexibilidade na hora de codar.
Firebase
O firebase é um Backend as a Service(BaaS), uma série de serviços em nuvem que abstraem taréfas repetitivas e pesadas para desenvolvedores tais como autenticação de usuário, armazenamento de dados dentre outros.
Lets Bora
Para iniciarmos um projeto nest usamos os seguintes comandos:
npm i -g @nestjs/cli //para instalar o nest cli de forma global
nest new project-name //para criar um projeto
Ele vai pergutar qual gerenciador de pacotes deseja usar, no meu caso vou usar o yarn:
Which package manager would you ❤️ to use?
npm
> yarn
pnpm
Instale o firebase-admin:
yarn add firebase-admin
//ou
npm i firebase-admin
Instale o dotenv para que os dados sensiveis do firebase sejam gravados em variáveis de ambiente e assim tornar mais segura estas informações:
yarn add dotenv
//ou
npm i dotenv
No arquivo main.ts na pasta src inicialize o dotenv:
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import * as dotenv from 'dotenv';
dotenv.config();
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(process.env.PORT || 3000);
}
bootstrap();
Dentro da pasta src crie um arquivo chamado firebase.config.ts, com as seguintes informações:
import * as firebase from 'firebase-admin';
export function initializeFirebase() {
var serviceAccount = JSON.parse(process.env.FIREBASE);
firebase.initializeApp({
credential: firebase.credential.cert(serviceAccount),
databaseURL: "https://exemplo-app.firebaseio.com"
});
}
- Importamos todo conteúdo de firebase-admin e nomeamos como firebase
- exportamos a função que irá inicializar a conexão
- pegamos as credênciais de uma variável de ambiente, que está em formato json e transformamos em um objeto com JSON.parse()
- chamamos as função firebase.initializeApp() passando as credenciais
Para obtermos as credenciais temos que ir no nosso projeto do firebase e em:
configuração do projeto
contas de serviço
gerar nova chave privada
Será iniciado o download de um arquivo JSON que conterá informações confidenciais do projeto usadas para fazer a integração, portanto tome cuidado onde deixa este arquivo e se possível o exclua após pegar suas informações. Ele terá as seguintes informações:
{
"type": "service_account",
"project_id": "exemplo-app",
"private_key_id": "000000000000000000000000000000000000",
"private_key": "-----BEGIN PRIVATE KEY-----varias letras aleatórias-----END PRIVATE KEY-----\n",
"client_email": "firebase-adminsdk-xxx@exemplo-app.iam.gserviceaccount.com",
"client_id": "000000000000000",
"auth_uri": "https://accounts.google.comxxxxxx",
"token_uri": "https://xxxx.googleapis.com/token",
"auth_provider_x509_cert_url":"https://www.googleapis.com/xxx",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/xxxxgserviceaccount.com"
}
Crie um arquivo .env na raiz de seu projeto e dentro dele crie uma variável de ambiente chamada FIREBASE, você deve setar seu valor colocando todas as credenciais do arquivo json em apenas uma linha:
//.env
FIREBASE={"type": "service_account", "project_id": "exemplo-app", "private_key_id": "000000000000000000000000000000000000", "private_key": "-----BEGIN PRIVATE KEY-----varias letras aleatórias-----END PRIVATE KEY-----\n", "client_email": "firebase-adminsdk-xxx@exemplo-app.iam.gserviceaccount.com", "client_id": "000000000000000", "auth_uri": "https://accounts.google.comxxxxxx", "token_uri": "https://xxxx.googleapis.com/token","auth_provider_x509_cert_url":"https://www.googleapis.com/xxx", "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/xxxxgserviceaccount.com"}
Novamente no arquivo main.ts na pasta src, inicialize o firebaseConfig:
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import * as dotenv from 'dotenv';
import { initializeFirebase } from './firebase.config';
dotenv.config();
initializeFirebase();
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(process.env.PORT || 3000);
}
bootstrap();
Podemos testar nossa integração criando um arquivo user.repository.ts dentro da pasta "src/repositorys":
import { Injectable } from "@nestjs/common";
import * as firebase from 'firebase-admin';
@Injectable()
export class UserRepository {
private _collectionRef: FirebaseFirestore.CollectionReference = firebase.firestore().collection('user');
public async getUser(UserId: string): Promise<any> {
return this._collectionRef.doc(UserId).get();
}
}
finalizando
Bom com esta configuração você poderá gravar dados no banco do firebase, atualizar ou apagar dados de autenticação de usuário tais como senhas e emails etc. É isso, obrigado por lerem este artigo e espero que ele tenha os ajudado! :)
(caso não: coloque mais café na chicara e não desanime!).
Top comments (3)
Consegui!! obrigado, ja listei uma colecao de firestore, ok
Como seria feito essa referência firebase ao invés do firestore ser com o realtime database ?
nessa parte do código
import { Injectable } from "@nestjs/common";
import * as firebase from 'firebase-admin';
@Injectable()
export class UserRepository {
private _collectionRef: FirebaseFirestore.CollectionReference = firebase.firestore().collection('user');
public async getUser(UserId: string): Promise {
return this._collectionRef.doc(UserId).get();
}
}
firebase.google.com/docs/database/...
firebase.google.com/docs/firestore...
Bem provável que getDatabase ou getFirestore ofereçam essa forma de trabalhar com o banco sem uso de real time