تابستون داره تموم میشه ها، فرصت‌ها محدودن کلی آفر جذاب در کمپین تابستون🔥👇
۰ ثانیه
۰ دقیقه
۰ ساعت
۲ shahab sb
حذف مقاله به همراه حذف فایل تصویر
جامعه نود جی اس ایجاد شده در ۲۱ مرداد ۱۴۰۲

سلام

واسه حذف مقاله که دارای تصویر هم هست به شکل زیر عمل کردم الان تنها مشکلی که دارم این هستش که نمیدونم نحوه ی استفاده از پرامیس‌ها درست هستش یا خیر ممنون میشم راهنمایی کنید

این کد‌های مربوط به کنترولر:

exports.delete = async (req, res) => {
 const postId = req.params.postId;
 if (parseInt(postId) === 0) {
  return res.redirect("/admin/posts");
 }
 const result = await postModel
  .delete(postId)
  .then((res) => {
   const filePath = process.cwd() + "/public/uploades/thumbnails/" + postId;
   fileService.removeDirectory(filePath);
   req.flash("success", "مقاله مورد نظر با موفقیت حذف شد!");
   return res.redirect("/admin/posts");
  })
  .catch((err) => {
   req.flash("warning", "عملیات حذف با خطا مواجه شد!");
   return res.redirect("/admin/posts");
  });
};

این کد هم مربوط به فایل سیستم هستش که نوشتم:

exports.removeDirectory = (directory) => {
 fs.rmdirSync(directory, { recursive: true });
};

واسه هر مقاله داخل پوشه تصاویر یه دایرکتوری به اسم آی دی اون مقاله درست کردم و موقع حذف مقاله اون دایرکتوری هم حذف میشه

الان این کد‌ها رو درست نوشتم؟

سلام،

بطور کلی اینطور دیده میشه که صحیح باشد.

  • اگر تابع delete یک promise برگرداند(که قاعدتاً باید برگرداند) میتوانید از then/catch استفاده کنید ولی در async/await بهتر است از try/catch مانند مثال این لینک کنترل کنید.
  • متغیر result استفاده ای نشده است.
  • دستور داخل تابع removeDirectory هم میتواند داخل try/catch بیاید.
  • میتونید قبل از حذف دایرکتوری از کاربر سؤال بپرسید.
محسن موحد ۲۲ مرداد ۱۴۰۲، ۲۳:۱۴

تابع delete توی مادل رو به صورت زیر نوشتن

exports.delete = async (postId) => {
  const [result] = await db.query(`DELETE FROM posts WHERE id=? LIMIT 1`, [
    postId,
  ]);
  // console.log(result);
  return result.affectedRows > 0;
};

الان هم کد بالا که مربوط به تابع حذف توی کنترولر مقالات رو به صورت زیر نوشتم،چندتا باگ داره پروژه م مربوط به جاهای دیگه ست الان کامنتشون کردم درستش کنم میذارم روی گیت ممنون میشم یه نگا بهش بندازید،

exports.delete = async (req, res) => {
  const postId = req.params.postId;
  if (parseInt(postId) === 0) {
    return res.redirect("/admin/posts");
  }
  try {
    const result = await postModel.delete(postId);
    if (result) {
      const filePath = process.cwd() + "/public/uploades/thumbnails/" + postId;
      fileService.removeDirectory(filePath);
      req.flash("success", "مقاله مورد نظر با موفقیت حذف شد!");
      return res.redirect("/admin/posts");
    }
  } catch (err) {
    req.flash("warning", "عملیات حذف با خطا مواجه شد!");
    return res.redirect("/admin/posts");
  }
};

الان از try ,catch استفاده کردم

اینم کار میکنه قبلی هم کار میکرد منتها چون از پرامیس‌ها توی جی اس فقط واسه گرفتن داده استفاده کردم حذف فایل رو مشکل دارم و میترسم واسه پروژه از نظر سرعت و کارایی مخرب باشه،

اگه امکانش هست آیدی گیت هابتون رو بهم بدین توی پروژه ی اصلیم اددتون کنم

shahab sb ۲۷ مرداد ۱۴۰۲، ۱۶:۴۳