
Como criar seu primeiro projeto CRUD completo: passo a passo
| 25/09/26Aprenda como criar seu primeiro projeto CRUD completo com Node.js, API REST e banco de dados. Veja o passo a passo para implementar Create, Read, Update e Delete.
Aprenda como criar seu primeiro projeto CRUD completo com Node.js, API REST e banco de dados. Veja o passo a passo para implementar Create, Read, Update e Delete.
Em resumo:
Veja mais informações a seguir!

Criar um projeto CRUD é uma das formas mais práticas de aprender como uma aplicação se comunica com um banco de dados.
A partir de um exemplo simples, é possível entender conceitos importantes de desenvolvimento back-end, APIs e operações com dados.
CRUD é uma sigla para Create, Read, Update e Delete, quatro operações básicas realizadas em muitos sistemas que armazenam informações.
Neste guia, você vai aprender como criar um projeto CRUD completo usando Node.js, API REST e banco de dados, desde a configuração do ambiente até a criação das principais rotas.
+ O que é arquitetura de software? Entenda o conceito e sua importância
CRUD representa quatro operações fundamentais para trabalhar com dados:
Essas operações aparecem em diversos tipos de sistemas. Um cadastro de alunos, por exemplo, pode permitir adicionar um estudante, consultar seus dados, alterar informações e remover o cadastro.
Por isso, entender CRUD é uma etapa importante para quem está começando a desenvolver aplicações que utilizam bancos de dados.
+ Estude com a Trilha de Tecnologia para Engenheiro de Software na Allevo Tech
Em uma aplicação web, o fluxo costuma envolver três componentes principais:
Um exemplo simples seria:
Aplicação → API Node.js → Banco de dados
Quando o usuário cadastra um produto, por exemplo, a aplicação envia os dados para a API. O servidor processa a solicitação e registra as informações no banco de dados.
+ O que é API REST: como funciona e por que desenvolvedores devem aprendê-la
Para acompanhar o projeto, é interessante ter conhecimentos básicos de:
Neste exemplo, serão utilizados:
O SQLite é uma opção prática para um primeiro projeto porque não exige a configuração de um servidor de banco de dados separado.
Primeiro, crie uma pasta para o projeto e abra o terminal dentro dela.
Depois, execute:
mkdir projeto-crud
cd projeto-crud
npm init -y
O comando npm init -y cria o arquivo package.json, utilizado para armazenar informações e dependências do projeto.
Agora, instale o Express e a biblioteca utilizada para trabalhar com SQLite:
npm install express sqlite3
Para facilitar o desenvolvimento, também é possível instalar o Nodemon:
npm install --save-dev nodemon
O Nodemon reinicia automaticamente o servidor quando um arquivo do projeto é alterado.
Uma estrutura simples pode ser organizada desta forma:
projeto-crud/
├── node_modules/
├── database.js
├── server.js
├── package.json
└── package-lock.json
O arquivo server.js ficará responsável pela API, enquanto database.js fará a configuração do banco de dados.
No arquivo database.js, configure uma conexão com o SQLite:
const sqlite3 = require('sqlite3').verbose();
const db = new sqlite3.Database('./database.sqlite');
db.run(`
CREATE TABLE IF NOT EXISTS produtos (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nome TEXT NOT NULL,
preco REAL NOT NULL
)
`);
module.exports = db;
Nesse exemplo, será criada uma tabela chamada produtos.
Cada produto terá três campos:
id: identificador único;nome: nome do produto;preco: preço do produto.O id será gerado automaticamente pelo banco de dados.
Agora, crie o arquivo server.js:
const express = require('express');
const db = require('./database');
const app = express();
app.use(express.json());
const PORT = 3000;
app.listen(PORT, () => {
console.log(`Servidor rodando na porta ${PORT}`);
});
O express.json() permite que a aplicação receba dados enviados em formato JSON.
Para iniciar o servidor, execute:
node server.js
Se tudo estiver funcionando, o terminal deverá mostrar uma mensagem indicando que o servidor está rodando na porta 3000.
A primeira operação do CRUD é o Create, utilizada para cadastrar novos dados.
No server.js, adicione:
app.post('/produtos', (req, res) => {
const { nome, preco } = req.body;
const sql = `
INSERT INTO produtos (nome, preco)
VALUES (?, ?)
`;
db.run(sql, [nome, preco], function (err) {
if (err) {
return res.status(500).json({
erro: 'Erro ao cadastrar produto'
});
}
res.status(201).json({
id: this.lastID,
nome,
preco
});
});
});
Agora, uma requisição POST para /produtos pode cadastrar um novo produto.
O corpo da requisição pode ser:
{
"nome": "Notebook",
"preco": 3500
}
A API receberá esses dados e os armazenará no banco.
A operação Read permite consultar os dados existentes.
Para buscar todos os produtos, utilize:
app.get('/produtos', (req, res) => {
const sql = 'SELECT * FROM produtos';
db.all(sql, [], (err, rows) => {
if (err) {
return res.status(500).json({
erro: 'Erro ao buscar produtos'
});
}
res.json(rows);
});
});
Agora, uma requisição:
GET /produtos
pode retornar:
[
{
"id": 1,
"nome": "Notebook",
"preco": 3500
}
]
Também é possível criar uma rota para consultar um produto específico:
app.get('/produtos/:id', (req, res) => {
const { id } = req.params;
db.get(
'SELECT * FROM produtos WHERE id = ?',
[id],
(err, row) => {
if (err) {
return res.status(500).json({
erro: 'Erro ao buscar produto'
});
}
if (!row) {
return res.status(404).json({
erro: 'Produto não encontrado'
});
}
res.json(row);
}
);
});
Nesse caso, uma requisição para:
GET /produtos/1
buscará o produto cujo id seja igual a 1.
O Update serve para modificar um registro existente.
Para atualizar um produto:
app.put('/produtos/:id', (req, res) => {
const { id } = req.params;
const { nome, preco } = req.body;
const sql = `
UPDATE produtos
SET nome = ?, preco = ?
WHERE id = ?
`;
db.run(sql, [nome, preco, id], function (err) {
if (err) {
return res.status(500).json({
erro: 'Erro ao atualizar produto'
});
}
if (this.changes === 0) {
return res.status(404).json({
erro: 'Produto não encontrado'
});
}
res.json({
mensagem: 'Produto atualizado com sucesso'
});
});
});
A requisição pode ser:
PUT /produtos/1
com o seguinte JSON:
{
"nome": "Notebook atualizado",
"preco": 3200
}
Assim, os dados do produto de id 1 serão alterados.
Por fim, o Delete permite excluir um registro.
Adicione:
app.delete('/produtos/:id', (req, res) => {
const { id } = req.params;
db.run(
'DELETE FROM produtos WHERE id = ?',
[id],
function (err) {
if (err) {
return res.status(500).json({
erro: 'Erro ao excluir produto'
});
}
if (this.changes === 0) {
return res.status(404).json({
erro: 'Produto não encontrado'
});
}
res.json({
mensagem: 'Produto excluído com sucesso'
});
}
);
});
Agora, uma requisição:
DELETE /produtos/1
excluirá o registro correspondente.
+ O que é DOM no JavaScript? Entenda a estrutura das páginas web
Depois de criar todas as operações, a API terá uma estrutura semelhante a esta:
| Operação | Método HTTP | Rota | Função |
|---|---|---|---|
| Create | POST | /produtos | Criar produto |
| Read | GET | /produtos | Listar produtos |
| Read | GET | /produtos/:id | Buscar um produto |
| Update | PUT | /produtos/:id | Atualizar produto |
| Delete | DELETE | /produtos/:id | Excluir produto |
Essa organização segue um padrão comum em APIs REST.
+ Como trabalhar com DevOps: o que faz o profissional e como começar
Uma forma simples de testar a API é utilizar ferramentas como Postman ou Insomnia.
Você pode começar enviando uma requisição POST para:
http://localhost:3000/produtos
Com:
{
"nome": "Teclado",
"preco": 150
}
Depois, faça uma requisição GET para:
http://localhost:3000/produtos
O produto cadastrado deverá aparecer na resposta.
Em seguida, teste as operações de atualização e exclusão.
POST;GET;id;PUT;DELETE;id inexistente;Ao construir um CRUD completo, você entra em contato com vários conceitos importantes do desenvolvimento de software.
Entre eles estão:
O projeto também serve como base para aplicações mais complexas.
+ Transição de carreira para tecnologia após os 30: guia completo para começar
Depois de entender o funcionamento básico, você pode adicionar novos recursos ao projeto.
Algumas possibilidades são:
Verifique se campos obrigatórios foram preenchidos e se valores possuem formatos válidos antes de enviá-los ao banco.
Adicione cadastro e login de usuários para controlar quem pode acessar determinadas operações.
Crie uma interface com HTML, CSS e JavaScript ou utilize um framework como React para consumir a API.
Depois de dominar o SQLite, você pode experimentar bancos como PostgreSQL ou MySQL.
Separe rotas, controladores, serviços e acesso ao banco de dados em diferentes arquivos. Essa estrutura facilita a manutenção de projetos maiores.
O CRUD apresenta uma estrutura encontrada em muitos sistemas que trabalham com dados.
Ao construir um projeto desse tipo, o estudante consegue visualizar na prática como uma aplicação recebe uma requisição, processa informações e interage com um banco de dados.
Por isso, um projeto CRUD pode funcionar como exercício para desenvolver conhecimentos em Node.js, APIs, bancos de dados e desenvolvimento back-end.
O mais importante no primeiro projeto é compreender o fluxo completo: requisição → API → banco de dados → resposta. Depois, novos recursos podem ser adicionados gradualmente.
+ O que é TypeScript? Entenda por que a linguagem ganhou espaço
Se você já deu os primeiros passos com programação, APIs e bancos de dados, pode continuar sua jornada de aprendizado com conteúdos voltados às principais áreas da tecnologia.
Conheça as trilhas de aprendizagem da Allevo Tech e encontre cursos para desenvolver suas habilidades e acompanhar as demandas do mercado de tecnologia.


Aprenda como criar seu primeiro projeto CRUD completo com Node.js, API REST e banco de dados. Veja o passo a passo para implementar Create, Read, Update e Delete.

Entenda qual linguagem de programação usar para criar jogos e compare C++, C# e Python. Veja também como começar sem código e usar IA.

Entenda o que é arquitetura de software, como ela organiza sistemas e aplicações e quando é necessário pensar na arquitetura de um projeto.