Uma API CRUD gerencia dados por meio de quatro operações básicas de banco de dados: produzir, ler, atualizar e excluir. Você pode produzir uma API CRUD simples com unicamente o Express e um banco de dados PostgreSQL.
Comece criando um servidor Express ao qual você conectará o PostgreSQL. Em seguida, crie as funções CRUD e conecte-as aos endpoints da API. Feito isso, você poderá conectar o Node ao PostgreSQL e realizar consultas de banco de dados em cada rota.
Pré-requisitos para produzir a API
Para escoltar nascente tutorial, você deve:
- Instale o Node em sua máquina.
- Instale o servidor PostgreSQL em sua máquina.
- Ter um conhecimento fundamental de Express.js.
Gerar um servidor expresso
Para produzir um servidor Express, comece criando um novo diretório e inserindo-o:
mkdir notes
cd notes
Em seguida, inicialize o npm:
npm init -y
Leste comando irá gerar um pacote.json registo na pasta de notas. Por termo, instale o Express.
npm install express
Crie um novo registo chamado índice.js e adicione o seguinte código.
const express = require("express");
const app = express();app.use(express.urlencoded({
extended: true
}));
app.use(express.json())
app.listen(3000, () => console.log("Listening on port 3000"));
Isso criará um novo servidor escutando na porta 3000.
Gerar um banco de dados PostgreSQL
Execute o seguinte comando no prompt de comando do psql para produzir um banco de dados PostgreSQL chamado noteb.
postgres=
Execute nascente comando para listar todos os bancos de dados Postgres e verifique se você criou o banco de dados noteb:
postgres=
Conecte-se ao banco de dados
Primeiramente, conecte seu aplicativo Node ao servidor PostgreSQL. Você pode usar o módulo node-Postgres.
Execute o seguinte para instalá-lo via npm:
npm install pg
Porquê boa prática, conecte-se ao banco de dados em um registo separado.
Crie um novo registo chamado db.js e adicione o seguinte.
const { Client } = require("pg");
const { user, host, database, password, port } = require("./dbConfig");const client = new Client({
user,
host,
database,
password,
port,
});
client.connect();
module.exports = client;
Cá, você está exportando a string de conexão que usará para se discursar com o banco de dados. Observe que você está lendo as configurações de conexão do banco de dados de um registo de maneira chamado dbConfig.js. Portanto, crie dbConfig.js e adicione os seguintes dados a ele.
module.exports = {
user: "{dbUser}",
host: "{dbHost}",
database: "notedb",
password: "{dbPassword}",
port: 5432,
};
Lembre-se de substituir os detalhes do banco de dados por seus próprios valores locais.
Gerar uma tábua PostgreSQL
No prompt de comando do psql, crie uma tábua chamada notes. Para debutar, conecte-se ao banco de dados noteb usando o comando c.
postgres=
Em seguida, crie uma tábua no banco de dados conectado usando o comando CREATE TABLE.
notedb=
ID SERIAL PRIMARY KEY,
note VARCHAR(255)
);
Esta tábua é bastante simples. Ele tem unicamente um ID que é uma chave primária gerada maquinalmente e um campo de texto chamado nota.
Gerar uma nota
Ao invés de realizar as operações CRUD nas rotas, crie funções que irão interagir com o banco de dados em um registo separado.
Crie um registo facilitar chamado helper.js e importe o objeto de conexão de db.js.
const client = require("./db");
Use o código a seguir para produzir a função createNote().
const createNote = (req, res) => {
try {
const { note } = req.body;if (!note) {
throw Error("Send note in request body");
}
client.query(
"INSERT INTO notes (note) VALUES ($1)",
[note],
(err, data) => {
res.status(201).json({
error: null,
message: "Created new note",
});
}
);
} catch (error) {
res.status(500).json({
error: error.message,
message: "Failed to create new note",
});
}
};
Essa função primeiro verifica se o corpo da solicitação incluiu uma nota. Se a nota estiver ausente, ela gera um erro.
Para produzir uma nota, a função usa a cláusula INSERT. Ele retorna um objeto JSON contendo uma mensagem de erro nula e uma mensagem de sucesso se for bem-sucedida.
Obter todas as notas
Para obter todas as notas da tábua, use a cláusula SELECT *.
const getNotes = (req, res) => {
try {
client.query("SELECT * FROM notes", (err, data) => {
if (err) throw err;res.status(200).json({
err: null,
notes: data.rows,
});
});
} catch (error) {
res.status(500).json({
err: error.message,
notes: null,
});
}
};
getNotes() envia o array notes no objeto de resposta se a consulta for bem-sucedida.
Obter Nota por ID
A API também terá um endpoint que retorna uma nota por ID. Em helper.js, adicione uma função getNoteById().
const getNoteById = (req, res) => {
try {
const { id } = req.params;
client.query("SELECT * FROM notes WHERE id=$1", [id], (err, data) => {
if (err) throw err;
res.status(200).json({
err: null,
note: data.rows[0],
});
});
} catch (error) {
res.status(500).json({
err: err.message,
note: null,
});
}
};
Esta função retornará um objeto JSON contendo a nota e um objeto de erro.
Atualizar nota por ID
Para atualizar uma nota, você precisa de uma nota e do ID dessa nota. Você receberá a nota do corpo da solicitação e o ID da URL.
A função updateNoteById() usa a cláusula UPDATE para atualizar uma nota existente com uma novidade nota.
const updateNoteById = (req, res) => {
try {
const { id } = req.params;
const { note } = req.body;
client.query(
"UPDATE notes SET note = $1 WHERE id = $2",
[note, id],
(err, data) => {
if (err) throw err;res.status(201).json({
err: null,
message: "Updated note",
});
}
);
} catch (error) {
res.status(500).json({
err: error.message,
message: "Failed to update note",
});
}
};
Esta função retorna uma mensagem de sucesso se a tábua for atualizada e uma mensagem de erro se não for.
Excluir nota por ID
Para excluir uma nota por ID da tábua, use o código a seguir.
const deleteNote = (req, res) => {
try {
const { id } = req.params;
client.query("DELETE FROM notes WHERE id=$1", [id], (err, data) => {
if (err) throw err;res.status(200).json({
error: null,
message: "Note deleted",
});
});
} catch (error) {
res.status(500).json({
error: error.message,
message: "Failed to delete note",
});
}
};
Agora que você criou todas as funções CRUD, exporte-as.
Em helper.js, adicione o seguinte.
module.exports = { createNote, getNotes, getNoteById, updateNoteById, deleteNote };
Você vai importá-los em índice.js ao produzir os endpoints da API.
Gerar rotas de API
A lanço final é produzir endpoints de API em índice.js para cada uma das operações CRUD.
Comece importando o registo helper.js.
const db = require("./helper")
Em seguida, crie cada endpoint.
app.get("/notes", db.getNotes);
app.get("/note/:id", db.getNoteById);
app.put("/note/:id", db.updateNoteById);
app.post("/note", db.createNote);
app.delete("/note/:id", db.deleteNote);
Uma API REST para atualizar seu banco de dados
Quando terminar, você pode verificar se sua API funciona usando um cliente REST porquê o Postman ou escrevendo testes de unidade. Você deve ser capaz de prometer que todos os cinco endpoints funcionem conforme o esperado.
Você também pode inspecionar e gerenciar os dados adicionados ao banco de dados usando a utensílio pgAdmin. É um aplicativo GUI que facilita a gestão do banco de dados e a interação com os servidores PostgreSQL.