ამ პოსტში მოყვანილი მაგალითებისთვის ვიყენებ ჩემს პროექტს, Nlife-ს. მისი წყარო-კოდი შეგიძლიათ ნახოთ აქ.
1. პროექტის სტრუქტურა
ხედები დახარისხებულია საქაღალდეებში კონტროლერების მიხედვით. კოდის გამეორების თავიდან ასაცილებლად, გვერდის ზოგადი სტრუქტურა ინახება
2.სახელების მინიჭების კონვენცია
როგორც ხედავთ, ეს პროექტი შედგება რამდენიმე მოდელის, ხედისა და კონტროლერისგან, ამიტომ მუშაობის პრინციპს განვიხილავ მხოლოდ
2. Routes ფაილი
ExpressJs-ის მეოთხე ვერსიიდან ხელმისაწვდომია Router კლასი. ამიტომ შეგვიძლია რაუტები ცალკე ფაილში გავიტანოთ. მაგალითად:
მეტი Router კლასისა და მისი მეთოდების შესახებ შეგიძლიათ წაიკითხოთ აქ.
3. კონტროლერი
ლოგიკის ამ ნაწილის 'იზოლაციისთვის' გამოვიყენოთ შემდეგი სინტაქსი:
ამ შემთხვევაში ყველა ფუნქციას აუცილებლად ექნება ორი პარამეტრი: req და res. საბოლოო ვარიანტი გამოიყურება დაახლოებით ასე:
4.მოდელი
Nlife იყენებს Mongoose-ს MongoDB-სთან ურთიერთობისთვის. ეს საშუალებას გვაძლევს მოდელის ლოგიკა გამოვყოთ დანარჩენი კოდისგან. დაახლოებით ასე:
5.ხედი
ხედებისთვის ეს პროექტი იყენებს Pug-ს. მუშაობის გასაადვილებლად და კოდის გამოერების თავიდან ასაცილებლად გვერდების ძირითადი სტრუქტურა ინახება
Search ხედი:
6.ე.წ. index ფაილი
ამ ვებ-აპლიკაციის გასაშვებად საჭიროა სკრიპტი, რომელიც მიიღებს შემომავალ მოთხოვნებს. ამ შემთხვევაში
1. პროექტის სტრუქტურა
საქაღალდე | დანიშნულება |
---|---|
./app | აპლიკაციის წყარო-კოდი. მოდელები, ხედები, კონტროლერები, დამხმარე მოდულები და ა.შ. |
./app/config | კონფიგურაციის ფაილები. ამ შემთხვევაში გვაქვს PassportJs-ის კონფიგი. |
./app/controllers | კონტროლერები |
./app/helpers | დამხმარე მოდულები. ამ შემთხვევაში Yelp API-სთან სამოშუაო მოდული. |
./app/middlewares | მოთხოვნისა და კონტროლერის შუამავალი ფუნქციონალი. |
./app/models | მოდელები |
./app/views | ხედები |
./app/views/includes | ხედების გამეორებადი ნაწილები. მაგ.: სანავიგაციო პანელი |
./data | MongoDB მონაცამთა ბაზის ლოკალური საცავი. |
./node_modules | npm სკრიპტები |
./public | სტატიკური ფაილები |
./public/assets | .css, .js ან სხვა გაფართოების სტატიკური ფაილები |
layout.pug
ფაილში.2.სახელების მინიჭების კონვენცია
- ყველა ფაილის სახელი მოდელის გარდა მისდევს camelCase დასახელების წესს
- ყველა კონტროლერს სახელის ბოლოს უწერია Controller (მაგ.: placesController.js)
- ყველა მოდელის სახელი მისდევს 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
Post a Comment