Merhaba arkadaşlar, serimizin bu dördüncü bölümünde Node.js ile Blog API Geliştirme Rehberi: Kullanıcı CRUD İşlemleri konusundan bahsedeceğim.
Bir önceki yazıda kullanıcı modelimizi ve kimlik doğrulama sistemimizi oluşturmuştuk. Şimdi ise kullanıcıları ekleme, listeleme, güncelleme ve silme gibi temel CRUD işlemlerini gerçekleştireceğiz.
Aşağıda gerçekleştireceğimiz CRUD işlemlerinin detaylarını bulabilirsiniz:
- Kullanıcı Listesi → Tüm kullanıcıları listeleme
- Belirli Bir Kullanıcıyı Getirme → Kullanıcı Id’si ile getir
- Kullanıcı Bilgilerini Güncelleme → Kullanıcı kendi bilgilerini güncelleyebilir
- Kullanıcıyı Silme → Silme
User Service (userService.js)
Kullanıcı CRUD işlemleri için services/userService.js dosyamızda aşağıdaki metotlarımızı oluşturuyoruz.
// Kullanıcı listesini getir (Sadece admin)
exports.getAllUsers = async () => {
return await User.find({}, '-password'); // Şifreleri dönme!
};
// Belirli bir kullanıcıyı getir
exports.getUserById = async (id) => {
return await User.findById(id, '-password');
};
// Kullanıcı bilgilerini güncelle
exports.updateUser = async (id, userData) => {
return await User.findByIdAndUpdate(id, userData, { new: true, select: '-password' });
};
// Kullanıcıyı sil (Sadece admin)
exports.deleteUser = async (id) => {
return await User.findByIdAndDelete(id);
};
User Controller (userController.js)
Bu servis fonksiyonlarını controllers/userController.js içinde kullanarak API metotlarımızı oluşturalım:
// Tüm kullanıcıları listele
exports.listUsers = async (req, res) => {
try {
const users = await userService.getAllUsers();
res.json(users);
} catch (err) {
res.status(500).json({ message: err.message });
}
};
// Belirli bir kullanıcıyı getir
exports.getUser = async (req, res) => {
try {
const user = await userService.getUserById(req.params.id);
if (!user) return res.status(404).json({ message: 'Kullanıcı bulunamadı' });
res.json(user);
} catch (err) {
res.status(500).json({ message: err.message });
}
};
// Kullanıcı bilgilerini güncelle
exports.updateUserInfo = async (req, res) => {
try {
if (req.user.id !== req.params.id) return res.status(403).json({ message: 'Yetkisiz erişim' });
const updatedUser = await userService.updateUser(req.params.id, req.body);
res.json(updatedUser);
} catch (err) {
res.status(500).json({ message: err.message });
}
};
// Kullanıcıyı sil
exports.removeUser = async (req, res) => {
try {
await userService.deleteUser(req.params.id);
res.json({ message: 'Kullanıcı başarıyla silindi' });
} catch (err) {
res.status(500).json({ message: err.message });
}
};
Auth Middleware (authMiddleware.js)
Kimlik doğrulama için middleware/authMiddleware.js dosyasını oluşturuyoruz:
const jwt = require('jsonwebtoken');
const User = require('../models/User');
const authMiddleware = async (req, res, next) => {
const token = req.header('Authorization')?.split(' ')[1];
if (!token) return res.status(401).json({ message: 'Yetkilendirme reddedildi' });
try {
const decoded = jwt.verify(token, process.env.JWT_SECRET);
req.user = await User.findById(decoded.id).select('-password');
next();
} catch (err) {
res.status(401).json({ message: 'Geçersiz token' });
}
};
module.exports = authMiddleware;
User Routes (userRoutes.js)
Şimdi de routes/userRoutes.js içinde route işlemlerini oluşturalım:
const express = require('express');
const userController = require('../controllers/userController');
const authMiddleware = require('../middleware/authMiddleware');
const router = express.Router();
router.post('/register', userController.register);
router.post('/login', userController.login);
// Tüm kullanıcıları listele
router.get('/',authMiddleware, userController.listUsers);
// Belirli bir kullanıcıyı getir
router.get('/:id', authMiddleware, userController.getUser);
// Kullanıcı bilgilerini güncelle
router.put('/:id', authMiddleware, userController.updateUserInfo);
// Kullanıcıyı sil
router.delete('/:id', authMiddleware, userController.removeUser);
Api metotlarını Postman üzerinden login metodunu çalıştırdıktan sonra oluşturduğumuz token ile listeleme, ekleme, güncelleme ve silme metotlarını çağırarak işlemlerimizi sağlayabiliriz.
Umarım faydalı olur.
Bir sonraki yazıda görüşmek üzere…
Jwt Paketi:
https://www.npmjs.com/package/jsonwebtoken
