├── .gitignore ├── utils ├── wrapAsync.js └── ExpressError.js ├── views ├── listings │ ├── error.ejs │ ├── new.ejs │ ├── edit.ejs │ ├── show.ejs │ └── index.ejs ├── includes │ ├── footer.ejs │ ├── flash.ejs │ └── navbar.ejs ├── users │ ├── login.ejs │ └── signup.ejs └── layouts │ └── boilerplate.ejs ├── public ├── js │ ├── map.js │ └── script.js └── css │ ├── style.css │ └── rating.css ├── models ├── user.js ├── review.js └── listing.js ├── cloudConfig.js ├── init ├── index.js └── data.js ├── controllers ├── reviews.js ├── users.js └── listings.js ├── routes ├── review.js ├── user.js └── listing.js ├── schema.js ├── package.json ├── middleware.js ├── app.js └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | .env 2 | node_modules/ -------------------------------------------------------------------------------- /utils/wrapAsync.js: -------------------------------------------------------------------------------- 1 | module.exports = (fn) => { 2 | return (req, res, next) => { 3 | fn(req, res, next).catch(next); 4 | }; 5 | }; -------------------------------------------------------------------------------- /views/listings/error.ejs: -------------------------------------------------------------------------------- 1 | <% layout("/layouts/boilerplate") %> 2 | 3 |
<%= message %>
6 |Owned by <%= listing.owner.username %>
18 | 19 |<%= listing.description %>
20 |21 | ₹ <%= listing.price.toLocaleString("en-IN") %> 22 |
23 |<%= listing.location %>
24 |<%= listing.country %>
25 | 26 |All Reviews
103 | <% for(review of listing.reviews) { %> 104 |<%= review.comment %>
112 | 113 | 122 |Trending
60 |
125 | <%= listing.title %>
126 | ₹ <%= listing.price.toLocaleString("en-IN") %> / night
127 | + 18% GST
128 |