Node.js ve SQLite ile CRUD İşlemleri: Örnek Todo Uygulaması

Posted by

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

  1. 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:

https://www.npmjs.com/package/sequelize

Leave a Reply

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir