LISTING OWNER
EVERY LISTING IS ASSIGNED AN OWNER TO AUTHORIZE THE LISTING INORDER TO EDIT/ DELETE THE LISTING.
BEFORE AUTHORIZATION OWNER FIELD IS ADDED TO THE USER SCHEMA AND IS INITIALIZED IN THE DATABASE.
IN init FOLDER INDEX.JS
const initDB = async () => {
await Listing.deleteMany({});
initData.data= initData.data.map((obj) => ({ ...obj, owner: "67d42a6d78000309d98682f2" }));
await Listing.insertMany(initData.data);
};
initDB();
{ ...obj, owner:
...obj TO GET THE EXISTING DATA IN obj
AFTER INITIALIZATION
TO DISPLAY IT
LISTINGS.JS
// SHOW ROUTE
router.get(
"/:id",
wrapAsync(async (req, res) => {
let { id } = req.params;
const listing = await Listing.findById(id)
.populate("reviews")
.populate("owner");
if (!listing) {
req.flash("error", "Listing requested doesn't exist!");
res.redirect("/listings");
}
res.render("listings/show.ejs", { listing });
})
);
SHOW.EJS
<div class="card-body">
<div class="card-text">
<p>Owned By: <i><%= listing.owner.username %></i></p>
<%= listing.description %><br />
₹<%= listing.price.toLocaleString("en-IN") %><br />
<%= listing.location %><br />
WHEN A NEW LISTING IS CREATED THE OWNER INFO SHOULD BE SAVED INORDER TO DISPLAY THE OWNER NAME.
router.post(
"/",
isLoggedIn,
ValidateListing,
wrapAsync(async (req, res, next) => {
const newListing = new Listing(req.body.listing);
newListing.owner = req.user._id;
await newListing.save();
req.flash("success", "New Listing Added!");
res.redirect("/listings");
})
);



Comments
Post a Comment