DEV Community

Code_Regina
Code_Regina

Posted on

|YelpCamp| Restructuring and Flash

               -Breaking Out Campground Routes 
               -Breaking Out Review Routes 
               -Configuring Session
               -Setting Up Flash 
               -Flash Success Partial 
Enter fullscreen mode Exit fullscreen mode

Breaking Out Campground Routes

Updating the routes and putting them in their own campgrounds.js file


const express = require('express'); 
const router = express.Router(); 
const catchAsync = require('../utils/catchAsync');
const { campgroundSchema } = require('../schemas.js');


const ExpressError = require('../utils/ExpressError');
const Campground = require('../models/campground');

const validateCampground = (req, res, next) => {
  const { error } = campgroundSchema.validate(req.body); 
  if (error) {
   const msg = error.details.map(el => el.message).join(',')
   throw new ExpressError(msg, 400)
  } else {
     next(); 
  }
}




router.get('/', catchAsync(async (req, res) => {
   const campgrounds = await Campground.find({}); 
   res.render('campgrounds/index', { campgrounds })
})); 

router.get('/campgrounds/new', (req, res) => {
  res.render('campgrounds/new');
})

router.post('/campgrounds', validateCampground, catchAsync(async (req, res)

Enter fullscreen mode Exit fullscreen mode

Breaking Out Review Routes

Creating a reviews.js to put the review code in.


const express = require('express'); 
const router = express.Router(); 

router.post('/campgrounds/id:/reviews', validateReview, catchAsync(async (req, res) => {
  const campground = await Campground.findById(req.params.id); 
  const review = new Review(req.body.review); 
  campground.reviews.push(review); 
  await review.save(); 
  await campground.save(); 
  res.redirect(`/campgrounds/${campground._id`); 

}))

router.delete('/campgrounds/:id/reviews/:reviewId', catchAsync(async (req, res) => {
  const { id, reviewId } = req.params; 
  await Campground.findByIdAndUpdate(id, { $pull: { reviews: reviewId } } ); 
  await Review.findByIdAndDelete(reviewId); 
  res.redirect(`/campgrounds/${id}`); 

}))

module.exports = router; 

Enter fullscreen mode Exit fullscreen mode

Configuring Session

session will be added to the main app.js file.


const sessionConfig = {
    secret: 'secretcode', 
    resave: false,   
    saveUninitialized: true, 
    cookie: {
       httpOnly: true, 
       expires: Date.now() + 1000 * 60 * 60 * 24 * 7, 
       maxAge: 1000 * 60 * 60 * 24 * 7
 } 

}

app.use(session(sessionConfig)) 


Enter fullscreen mode Exit fullscreen mode

Alt Text

Setting Up Flash

To display a quick message to the user that the data was successful. The message will disappear once the page has been reloaded/refreshed.


app.use(flash()); 

app.use((req, res, next) => {
   res.locals.success = req.flash('success'); 
   res.locals.error = req.flash('error'); 
   next(); 

})

Enter fullscreen mode Exit fullscreen mode

Flash Success Partial

in the flash.ejs file

Alt Text

Top comments (0)