FLASH SUCCESSES (ALERTS)
WE ADD STYLING TO SUCCESS FLASH MESSAGES.
WE CREATE A NEW FILE IN INCLUDES(VIEWS FOLDER)- FLASH.EJS
FLASH.EJS
<% if(success.length){ %>
<div class="alert alert-success alert-dismissible fade show col-6 offset-3" role="alert">
<%=success%><button
type="button"
class="btn-close"
data-bs-dismiss="alert"
aria-label="Close"
></button>
</div>
<%} %>
HERE,SUCCESS IS AN ARRAY. res.locals.success = req.flash("success");
SO,WHENEVER SUCCESS.LENGTH IS TRUE AN ALERT IS GENERATED.
IT IS REQUIRED IN boilerplate.ejs
<%- include("../includes/navbar.ejs") %>
<div class="container">
<%- include("../includes/flash.ejs") %>
<%- body %></div>
<%- include("../includes/footer.ejs") %>
LISTINGS.JS
FLASH MESSAGES ARE ADDED ,WHENEVER A NEW LISTING IS CREATED, AND WHEN A LISTING IS UPDATED OR DELETED.
// NEW ROUTE
router.get("/new", (req, res) => {
res.render("listings/new.ejs");
});
router.post(
"/",
ValidateListing,
wrapAsync(async (req, res, next) => {
const newListing = new Listing(req.body.listing);
await newListing.save();
req.flash("success", "New Listing Added!");
res.redirect("/listings");
})
);// UPDATE ROUTE
router.put(
"/:id",
ValidateListing,
wrapAsync(async (req, res) => {
if (!req.body.listing) {
throw new ExpressError(400, "send valid data!");
}
let { id } = req.params;
await Listing.findByIdAndUpdate(id, { ...req.body.listing });
req.flash("success", "Updated Successful!");
res.redirect(`/listings/${id}`);
})
);
// DELETE ROUTE
router.delete(
"/:id",
wrapAsync(async (req, res) => {
let { id } = req.params;
let deletedList = await Listing.findByIdAndDelete(id);
console.log(deletedList);
req.flash("success", "Listing Deleted!");
res.redirect("/listings");
})
);
REVIEW.JS
ALERTS ARE GENERATED WHEN A REVIEW IS CREATED OR DELETED.
// REVIEWS
router.post(
"/",
ValidateReview,
wrapAsync(async (req, res) => {
let { id } = req.params;
let listing = await Listing.findById(id);
let newRev = new Review(req.body.review);
console.log(newRev);
await newRev.save();
listing.reviews.push(newRev);
await listing.save();
console.log("review saved");
req.flash("success", "New Review Added!");
res.redirect(`/listings/${id}`);
})
);
// DELETE REVIEW
router.delete(
"/:reviewId",
wrapAsync(async (req, res) => {
let { id, reviewId } = req.params;
await Listing.findByIdAndUpdate(id, { $pull: { reviews: reviewId } });
await Review.findByIdAndDelete(reviewId);
req.flash("success", "Review Deleted!");
res.redirect(`/listings/${id}`);
})
);








Comments
Post a Comment