Odak modu
Kategori Listelemek
Bu çalışmamızda SmartEdu projemize ait kategorileri oluşturacağız ve bu kategorilere ait kursları listeleyeceğiz. İlk yapmamız gereken Category modelimizi oluşturmak. Category.js
const mongoose = require('mongoose');
const slugify = require('slugify');
const Schema = mongoose.Schema;
const CategorySchema = new Schema({
name: {
type: String,
unique: true,
required: true,
},
slug: {
type:String,
unique: true
}
});
CategorySchema.pre('validate', function(next){
this.slug = slugify(this.name, {
lower:true,
strict:true
})
next();
})
const Category = mongoose.model('Category', CategorySchema);
module.exports = Category;
Kategorileri oluşturmak için ise sırada ilgili controller
dosyasının içerisinde createCategory
fonksiyonunu oluşturacağız.
const Category = require('../models/Category');
exports.createCategory = async (req, res) => {
try {
const category = await Category.create(req.body);
res.status(201).json({
status: 'success',
category,
});
} catch (error) {
res.status(400).json({
status: 'fail',
error,
});
}
};
Burada kritik nokta ise kurs ve kategory arasındaki bağlantıyı kurmak. Bunun için Course modelinde category
isminde yeni bir alan oluşturacağız. Bu alan bize o kursun ait olduğu kategori bilgisine ulaşmamızı sağlar.
category: {
type:mongoose.Schema.Types.ObjectId,
ref:'Category'
}
Şimdi kursları sıralamak için gerekli kategori filtresini oluşturalım. Bu filtreyi oluşturmak için gerekli olan parametreyi ise ?categories=<category_slug>
olarak alacağız.
const categorySlug = req.query.categories;
const category = await Category.findOne({slug:categorySlug})
let filter = {};
if(categorySlug) {
filter = {category:category._id}
}
const courses = await Course.find(filter);
İlgili courses
template içerisinde kategorileri aşağıdaki şekilde sıralayabiliriz.
<% for (let i=0; i< categories.length; i++) { %>
<li><a href="/courses?categories=<%= categories[i].slug %>"><%= categories[i].name %></a></li>
<% } %>
Sektörde en çok aranan yazılım becerilerini kazan
Yapay zeka desteği, birebir mentörlük saatleri, canlı dersler ve senin için özel hazırlanmış içeriklerle eksiklerini tamamla, düzenli geri bildirimler al ve öğrenme sürecini en verimli hale getir.
Yunus Emre Kabakcı
Patika+ mezunuPatika+ Fullstack Web Development Bootcamp mezunumuz Yunus Emre,
3 ay içinde Katar’dan aldığı teklif ile, global bir şirket olan Pavo Group’da işe başladı!
“İçerik zenginliği, mentor desteği, ileriye dönük bir network sağlaması ve dünyada en çok tercih edilen frameworkler üzerinden bir eğitim veriyor olması Patika+’ı tercih etmemin temel sebepleri oldu!“
Yorum yapabilmek için derse kayıt olmalısın!