ExpressJS და MVC სტრუქტურული მოდელი

ამ პოსტში მოყვანილი მაგალითებისთვის ვიყენებ ჩემს პროექტს, Nlife-ს. მისი წყარო-კოდი შეგიძლიათ ნახოთ აქ.

1. პროექტის სტრუქტურა


საქაღალდედანიშნულება
./appაპლიკაციის წყარო-კოდი. მოდელები, ხედები, კონტროლერები, დამხმარე მოდულები და ა.შ.
./app/configკონფიგურაციის ფაილები. ამ შემთხვევაში გვაქვს PassportJs-ის კონფიგი.
./app/controllersკონტროლერები
./app/helpersდამხმარე მოდულები. ამ შემთხვევაში Yelp API-სთან სამოშუაო მოდული.
./app/middlewaresმოთხოვნისა და კონტროლერის შუამავალი ფუნქციონალი.
./app/modelsმოდელები
./app/viewsხედები
./app/views/includesხედების გამეორებადი ნაწილები. მაგ.: სანავიგაციო პანელი
./dataMongoDB მონაცამთა ბაზის ლოკალური საცავი.
./node_modulesnpm სკრიპტები
./publicსტატიკური ფაილები
./public/assets.css, .js ან სხვა გაფართოების სტატიკური ფაილები
ხედები დახარისხებულია საქაღალდეებში კონტროლერების მიხედვით. კოდის გამეორების თავიდან ასაცილებლად, გვერდის ზოგადი სტრუქტურა ინახება layout.pug ფაილში.

2.სახელების მინიჭების კონვენცია

  1. ყველა ფაილის სახელი მოდელის გარდა მისდევს camelCase დასახელების წესს
  2. ყველა კონტროლერს სახელის ბოლოს უწერია Controller (მაგ.: placesController.js)
  3. ყველა მოდელის სახელი მისდევს CapitalizedCamelCase დასახელების წესს


როგორც ხედავთ, ეს პროექტი შედგება რამდენიმე მოდელის, ხედისა და კონტროლერისგან, ამიტომ მუშაობის პრინციპს განვიხილავ მხოლოდ /places/search რაუტის მაგალითზე.

2. Routes ფაილი
ExpressJs-ის მეოთხე ვერსიიდან ხელმისაწვდომია Router კლასი. ამიტომ შეგვიძლია რაუტები ცალკე ფაილში გავიტანოთ. მაგალითად:
მეტი Router კლასისა და მისი მეთოდების შესახებ შეგიძლიათ წაიკითხოთ აქ.
3. კონტროლერი
ლოგიკის ამ ნაწილის 'იზოლაციისთვის' გამოვიყენოთ შემდეგი სინტაქსი:
exports.functionName = function(params) { return; };
ამ შემთხვევაში ყველა ფუნქციას აუცილებლად ექნება ორი პარამეტრი: req და res. საბოლოო ვარიანტი გამოიყურება დაახლოებით ასე:
4.მოდელი
Nlife იყენებს Mongoose-ს MongoDB-სთან ურთიერთობისთვის. ეს საშუალებას გვაძლევს მოდელის ლოგიკა გამოვყოთ დანარჩენი კოდისგან. დაახლოებით ასე:
5.ხედი
ხედებისთვის ეს პროექტი იყენებს Pug-ს. მუშაობის გასაადვილებლად და კოდის გამოერების თავიდან ასაცილებლად გვერდების ძირითადი სტრუქტურა ინახება layout.pug ფაილში. ამავე მიზნით, გამეორებადი მარქაფი (მაგ.: სანავიგაციო პანელი) ინახება ცალკე /app/views/includes საქაღალდეში. ძირითადი სტრუქტურა:

Search ხედი:

6.ე.წ. index ფაილი
ამ ვებ-აპლიკაციის გასაშვებად საჭიროა სკრიპტი, რომელიც მიიღებს შემომავალ მოთხოვნებს. ამ შემთხვევაში server.js, რომელიც პროექტის რუთშია და დაახლოებით ასე გამოიყურება:

Comments