Odak modu

Node.js

Kategori Oluşturmak ve Listelemek

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>
<% } %>	


Proje GitHub


Çalışma Özel GitHub



Daha Fazlası İçin


left-disk

Yazılım Kariyerinde İlerlemeni Hızlandıracak Programlar

Patika+ programlarımız ile 4-8 aylık yoğun yazılım kamplarına katıl, temel bilgilerden başlayarak kapsamlı bilgiler edin, yazılım kariyerine başla!

right-cube

Yorumlar

Yorum yapabilmek için derse kayıt olmalısın!