Merhaba arkadaşlar, bu yazımda sizlere Node.js ve SQLite ile CRUD İşlemleri konusundan bahsedeceğim.
Bu yazıda, Node.js ve SQLite kullanarak bir Todo uygulaması geliştireceğiz. Veritabanı işlemleri için Sequelize ORM kullanacağız. Bu uygulama, CRUD (Create, Read, Update, Delete) işlemlerini destekleyecek ve bir SQLite veritabanına bağlanacaktır.
Gerekli Araçlar
- Node.js: JavaScript ortamında çalışmak için.
- SQLite: Hafif bir ilişkisel veritabanı.
- Sequelize: Node.js uygulamaları için güçlü bir ORM.
Proje Kurulumu
1. Proje Dizini Oluşturma
mkdir sqlite-todo
cd sqlite-todo
npm init -y
2. Gerekli Paketleri Yükleme
npm install express sequelize sqlite3 body-parser
3. Proje Yapılandırması
app.js
dosyasını oluşturduktan sonra aşağıdaki kodları ekleyebilirsiniz.
Kodun Açıklaması
1. Gerekli Modüllerin Dahil Edilmesi
const express = require('express');
const { Sequelize, DataTypes } = require('sequelize');
const bodyParser = require('body-parser');
- express: Sunucu oluşturmak için.
- Sequelize: ORM olarak veritabanı işlemleri için.
- body-parser: JSON verisini ayrıştırmak için.
2. Express Sunucusu ve Middleware Kurulumu
const app = express();
const port = 5000;
// Middleware
app.use(bodyParser.json());
3. Sequelize ve Veritabanı Bağlantısı
SQLite ile bağlantıyı aşağıdaki şekilde ayarlıyoruz:
const sequelize = new Sequelize({
dialect: 'sqlite',
storage: 'D:\\NodejsProjects\\sqlite-sample\\todo.db' // Veritabanı dosyasının yolu
});
storage
parametresinde belirtilen yol, veritabanı dosyasının kaydedileceği, bulunduğu yeri belirler.
4. Task Modeli Tanımlama
const Task = sequelize.define('Task', {
title: {
type: DataTypes.STRING,
allowNull: false
},
description: {
type: DataTypes.STRING
},
isCompleted: {
type: DataTypes.BOOLEAN,
defaultValue: false
}
}, {
tableName: 'Tasks'
});
- title: Görevin başlığı. Zorunlu alan.
- description: Görevin açıklaması. Opsiyonel alan.
- isCompleted: Görevin tamamlanma durumu. Varsayılan olarak
false
.
5. Veritabanını Senkronize Etme
(async () => {
try {
await sequelize.sync({ force: true });
console.log('Database synced');
} catch (error) {
console.error('Error syncing database:', error);
}
})();
Bu kod, tabloyu oluşturur ve mevcut tabloyu yeniden başlatır (force: true).
6. CRUD İşlemleri
Yeni Görev Oluşturma
app.post('/tasks', async (req, res) => {
try {
const { title, description } = req.body;
const task = await Task.create({ title, description });
res.status(201).json(task);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
Bu endpoint, JSON formatında gönderilen verilerle yeni bir görev oluşturur.
Tüm Görevleri Listeleme
app.get('/tasks', async (req, res) => {
try {
const tasks = await Task.findAll();
res.json(tasks);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
Bu endpoint, veritabanındaki tüm görevleri döner.
Belirli Bir Görevi Görüntüleme
app.get('/tasks/:id', async (req, res) => {
try {
const id = req.params.id;
const task = await Task.findByPk(id);
if (!task) {
return res.status(404).json({ error: 'Task not found' });
}
res.json(task);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
Belirli bir id
değerine sahip görevi getirir.
Görev Güncelleme
app.put('/tasks/:id', async (req, res) => {
try {
const id = req.params.id;
const { title, description, isCompleted } = req.body;
const task = await Task.findByPk(id);
if (!task) {
return res.status(404).json({ error: 'Task not found' });
}
await task.update({ title, description, isCompleted });
res.json(task);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
Belirli bir görevi günceller.
Görev Silme
app.delete('/tasks/:id', async (req, res) => {
try {
const id = req.params.id;
const task = await Task.findByPk(id);
if (!task) {
return res.status(404).json({ error: 'Task not found' });
}
await task.destroy();
res.json({ message: 'Task deleted' });
} catch (error) {
res.status(500).json({ error: error.message });
}
});
Belirli bir görevi siler.
7. Sunucuyu Başlatma
app.listen(port, () => {
console.log(`Server is running on http://localhost:${port}`);
});
Express sunucusu belirtilen portta çalışır.
Test Etme
- Sunucuyu başlatın:
node app.js
2. Postman veya benzeri bir araç kullanarak endpoint’leri test edin:
- POST
/tasks
- GET
/tasks
- GET
/tasks/:id
- PUT
/tasks/:id
- DELETE
/tasks/:id
Bu örnekte, Node.js ve SQLite ile CRUD işlemlerini basit bir şekilde Sequelize paketini kullanarak modelleme ve veritabanı işlemlerini sağlamış olduk ve endpointlerimizi yazdık. Daha fazla özellik eklemek için modeli genişletebilir veya ilişkisel yapılar oluşturabilirsiniz.
Umarım faydalı olur.
Bir sonraki yazıda görüşmek üzere…
Sequalize Paketi: