Controller
Controller
Controller - bu API ning miyasi. So’rov kelganda nima qilish kerakligini shu yerda yozamiz. Har bir amal uchun alohida funksiya bo’ladi.
Controller yaratish
src/controllers/noteController.js faylini yarating:
const Note = require('../models/Note');
// Barcha eslatmalarni olish
const getNotes = async (req, res) => {
try {
const notes = await Note.find().sort({ createdAt: -1 });
res.json({
success: true,
count: notes.length,
data: notes
});
} catch (error) {
res.status(500).json({
success: false,
message: 'Serverda xatolik yuz berdi'
});
}
};
// Bitta eslatmani olish
const getNote = async (req, res) => {
try {
const note = await Note.findById(req.params.id);
if (!note) {
return res.status(404).json({
success: false,
message: 'Eslatma topilmadi'
});
}
res.json({
success: true,
data: note
});
} catch (error) {
res.status(500).json({
success: false,
message: 'Serverda xatolik yuz berdi'
});
}
};
// Yangi eslatma yaratish
const createNote = async (req, res) => {
try {
const { title, content } = req.body;
const note = await Note.create({
title,
content
});
res.status(201).json({
success: true,
data: note
});
} catch (error) {
if (error.name === 'ValidationError') {
const messages = Object.values(error.errors).map(err => err.message);
return res.status(400).json({
success: false,
message: messages.join(', ')
});
}
res.status(500).json({
success: false,
message: 'Serverda xatolik yuz berdi'
});
}
};
// Eslatmani yangilash
const updateNote = async (req, res) => {
try {
const { title, content } = req.body;
const note = await Note.findByIdAndUpdate(
req.params.id,
{ title, content },
{ new: true, runValidators: true }
);
if (!note) {
return res.status(404).json({
success: false,
message: 'Eslatma topilmadi'
});
}
res.json({
success: true,
data: note
});
} catch (error) {
if (error.name === 'ValidationError') {
const messages = Object.values(error.errors).map(err => err.message);
return res.status(400).json({
success: false,
message: messages.join(', ')
});
}
res.status(500).json({
success: false,
message: 'Serverda xatolik yuz berdi'
});
}
};
// Eslatmani o'chirish
const deleteNote = async (req, res) => {
try {
const note = await Note.findByIdAndDelete(req.params.id);
if (!note) {
return res.status(404).json({
success: false,
message: 'Eslatma topilmadi'
});
}
res.json({
success: true,
message: 'Eslatma o\'chirildi'
});
} catch (error) {
res.status(500).json({
success: false,
message: 'Serverda xatolik yuz berdi'
});
}
};
module.exports = {
getNotes,
getNote,
createNote,
updateNote,
deleteNote
};Har bir funksiya nima qiladi?
getNotes
Barcha eslatmalarni qaytaradi. Eng yangisi birinchi bo’lib chiqadi (.sort({ createdAt: -1 })).
getNote
Berilgan ID bo’yicha bitta eslatmani topadi. Agar topilmasa, 404 xatosini qaytaradi.
createNote
So’rov tanasidan (req.body) sarlavha va matnni olib, yangi eslatma yaratadi. Agar majburiy maydonlar bo’sh bo’lsa, xato qaytaradi.
updateNote
Berilgan ID li eslatmani yangi ma’lumotlar bilan yangilaydi. { new: true } - yangilangan eslatmani qaytaradi, { runValidators: true } - tekshiruvlarni ishga tushiradi.
deleteNote
Berilgan ID li eslatmani o’chiradi.
Xatolarni ushlash
Har bir funksiyada try/catch ishlatamiz. Agar xatolik bo’lsa, foydalanuvchiga tushunarli xabar qaytaramiz. Validation xatolarini alohida ushlayapmiz - bu foydalanuvchi noto’g’ri ma’lumot kiritganda chiqadi.
Keyingi bo’limda route larni yozamiz va hamma narsani bog’laymiz.