Knex
O que é?
Lib para construção de queries utilizando apenas JavaScript.
Muito performático, de forma que pode-se migrar de banco de dados SQL (MySQL, PostgreSQL, MariaDB, Oracle) de uma hora para a outra sem precisar alterar o código.
Instalação
Instalar rodando o comando $ yarn add knex
e baixar o driver do Banco SQL que será utilizado (por exemplo: $ yarn add sqlite3
).
Verificar as dependências:
Conexão com o Banco de dados
Arquivo src/database/knex.ts
import knex from "knex";import path from "path";const connection = knex({client: "sqlite3",connection: {filename: path.resolve(__dirname, "database.sqlite"),},});export default connection;
Arquivo knexfile.ts
import path from "path";module.exports = {client: "sqlite3",connection: {filename: path.resolve(__dirname, "src", "database", "database.sqlite"),},migrations: {directory: path.resolve(__dirname, "src", "database", "migrations"),},seeds: {directory: path.resolve(__dirname, "src", "database", "seeds"),},useNullAsDefault: true,};
Migrations
Criação
Para criar uma migration utilizando o Knex, é recomendável usar números (por exemplo: src/database/migrations/01_create_users
)
Modelo de Migration:
import Knex from "knex";export async function up(knex: Knex) {return knex.schema.createTable("points", (table) => {table.increments("id").primary();table.string("image").notNullable();table.string("name").notNullable();table.string("email").notNullable();table.string("whatsapp").notNullable();table.decimal("latitude").notNullable();table.decimal("longitude").notNullable();table.string("city").notNullable();table.string("uf", 2).notNullable();});}export async function down(knex: Knex) {return knex.schema.dropTable("points");}
Executando
Para executar as migrations, basta rodar o comando:
$ npx knex migrate:latest
Seeds
Criação
Para criar uma seed utilizando o Knex, é recomendável usar números (por exemplo: src/database/seeds/01_generate_users
)
Modelo de Migration:
import Knex from "knex";export async function up(knex: Knex) {return knex.schema.createTable("points", (table) => {table.increments("id").primary();table.string("image").notNullable();table.string("name").notNullable();table.string("email").notNullable();table.string("whatsapp").notNullable();table.decimal("latitude").notNullable();table.decimal("longitude").notNullable();table.string("city").notNullable();table.string("uf", 2).notNullable();});}export async function down(knex: Knex) {return knex.schema.dropTable("points");}
Executando
Para executar as migrations, basta rodar o comando:
$ npx knex migrate:latest
Scripts no package.json
{"knex:seed": "knex --knexfile knexfile.ts seed:run","knex:migrate": "knex --knexfile knexfile.ts migrate:latest"}
Conexão
Configurando a Conexão
Configurando as conexões no arquivo src/database/connection.js
:
const knex = require('knex');const configuration = require('../../knexfile');const connection = knex(configuration.development);module.exports = connection;
Conectando com o BDD
Arquivo src/routes.js
// Importação do arquivo de conexãoconst connection = require('./database/connection');// ...// Inserindo na tabela 'ongs' o conteúdo de variáveis definidas anteriormenteawait connection('ongs').insert({id,name,email,whatsapp,city,uf,});