זה נושא דיון מלווה לערך המקורי ב- https://www.tocode.co.il/bundles/nodejs/lessons/49-lab-users
זה נושא דיון מלווה לערך המקורי ב- https://www.tocode.co.il/bundles/nodejs/lessons/49-lab-users
היי ינון
יש לך במקרה פתרון מוכן לשתי הבעיות האלה על מנת שאוכל להשוות את הפתרון שלי לשלך?
תודה
גיא
הי גיא,
אני לא מפרסם פה פיתרונות - שמתי לב שלהשאיר שאלות פתוחות יותר מעודד אנשים להתאמץ ולפתור לבד, וגם יש ממילא כל כך הרבה דרכים לפתור כל דבר שכל פיתרון שאני אפרסם ״ישאיר בחוץ״ הרבה פיתרונות טובים אחרים.
אם אתה רוצה מוזמן לפרסם פה את הפיתרון שכתבת (לינק לגיטהאב למשל) ואשמח להעיף מבט לתת מילה טובה ולהציע רעיונות לשיפור
אפשר איזה רעיון איך לבצע את סינון הפיד באופן יעיל?
בהתחלה חשבתי להוסיף נתיב posts/:id שייראה בדיוק כמו posts/ וירנדר את דף הindex פשוט עם רשימת פוסטים מסוננים לפי המשתמש שהid שלו נשלח כפרמטר:
router.get('/:id', async function(req, res, next) {
try {
const totalRecords = await Post.estimatedDocumentCount({ author: req.params.id });
const itemsPerPage = Number(req.query.limit) || 3;
const page = Number(req.query.page) || 1;
const totalPages = totalRecords / itemsPerPage;
const offset = itemsPerPage * (page - 1);
const posts = await Post.find({ author: req.params.id }).sort({ _id: -1 }).limit(itemsPerPage).skip(offset).populate('author');
res.render('posts/index', { posts, paginate: {
totalPages,
url: (pageNumber) => `/posts/${req.params.id}/?page=${pageNumber}`
}});
} catch (err) {
console.log('error');
return next(err);
}
});
אבל אז לא ידעתי איך ליצור בקשה שתפנה לנתיב הזה באמצעות איזשהו form בפיד.
מצד שני, בכלל מדובר פה בשכפול של מלא קוד כי הנתיב הזה מאד דומה לנתיב שמציג הפיד בלי הסינון.
הי,
בדרך כלל בבקשות סינון מילת החיפוש נשלחת כפרמטר, כלומר:
/search?user=ynon
ואז משתמשים ב req.params כדי לקבל את הערך.
לגבי בקשה מהסוג שכתבת אפשר להשתמש בקישור רגיל כדי להגיע אליה, אבל היא נועדה יותר לדברים קבועים ואז באמצעות EJS יוצרים את הקישורים בדף שנשלח מהשרת עבור המשתמש הספציפי.
לגבי כפילות הקוד מומלץ להוציא את הקוד המשותף לפונקציה ולקרוא לה משני הנתיבים
Hi Ynon,
I have finished this auth exercise,
used your class code as scaffolding and adapted.
אודה על הערות.
תודה,
אברהם