-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.js
142 lines (117 loc) · 3.68 KB
/
app.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
const express = require("express");
const app = express();
const mongoose = require("mongoose");
const Listing = require("./models/listing.js");
const path = require("path");
const methodOverride = require("method-override");
const ejsMate = require("ejs-mate");
const wrapAsync = require("./utils/wrapAsync.js");
const ExpressError = require("./utils/ExpressError.js");
const {listingSchema} =require("./schema.js");
const MONGO_URL = "mongodb://127.0.0.1:27017/Ecommerce";
// const MONGO_URI = "mongodb://127.0.0.1:27017/SecondDB";
main().then(()=>{
console.log("connect DB");
}).catch((err)=>{
console.log(err);
})
async function main() {
await mongoose.connect(MONGO_URL)
}
app.set("view engine" , "ejs");
app.set("views" , path.join(__dirname , "views"));
app.use(express.urlencoded({extended:true})); //we use this for parsing the data
app.use(methodOverride("_method"));
app.engine("ejs" , ejsMate);
app.use(express.static(path.join(__dirname , "/public")));
app.get("/" , (req , res)=>{
res.send("i am root");
});
const validateListing = (req , res , next) =>{
let {error} = listingSchema.validate(req.body);
if(error){
let errMsg = error.details.map((el) => el.message).join(",");
throw ExpressError(400 , errMsg);
}else{
next();
}
}
// Index Route
app.get("/listings" ,wrapAsync(async (req , res)=>{
const allListing = await Listing.find({});
res.render("listings/index.ejs", {allListing});
}));
// New Route
app.get("/listings/new" , (req , res)=>{
res.render("listings/new.ejs" )
})
// Feedback
app.get("/listings/feedback" , (req , res)=>{
res.render("listings/feedback.ejs");
});
// Show route
app.get("/listings/:id" , wrapAsync(async (req , res)=>{
let {id} = req.params;
const listing = await Listing.findById(id);
res.render("listings/show.ejs" , {listing});
}))
// Create Route
app.post("/listings" ,
validateListing,
wrapAsync( async (req , res , next)=>{
// here we have done destructring in new.ejs in new way
let result = listingSchema.validate(req.body);
console.log(result);
if(result.error){
throw new ExpressError(400 , error);
}
const newListing = new Listing(req.body.listing);
await newListing.save();
res.redirect("/listings");
})
);
// Edit Route
app.get("/listings/:id/edit" ,wrapAsync(async (req , res)=>{
let {id} = req.params;
const listing = await Listing.findById(id);
res.render("listings/edit.ejs" , {listing})
}))
// Update
app.put("/listings/:id" ,
validateListing,
wrapAsync(async (req , res)=>{
let {id} = req.params;
await Listing.findByIdAndUpdate(id , {...req.body.listing});
res.redirect(`/listings/${id}`);
}))
// // Delete
// app.delete("/listings/:id" ,wrapAsync(async (req , res)=>{
// let {id} = req.params;
// let deletedListing = await Listing.findByIdAndDelete(id);
// console.log(deletedListing);
// res.redirect("/listings");
// })
// )
// app.get("/testListing" , async (req , res)=>{
// let sampleListing = new Listing({
// title : "My New Villa",
// description : "By the beatch",
// price : 1200,
// location : "calangute , Goa",
// country : "India",
// });
// await sampleListing.save();
// console.log("sample was saved");
// res.send("sucessful testing ");
// })
app.all("*", (req , res , next) =>{
next(new ExpressError(404 , "Page not Found"))
})
app.use((err , req , res , next) =>{
let {statusCode = 500 , message = "someting went wrong"} = err;
res.render("error.ejs")
// res.status(statusCode ).send(message);
});
app.listen(8080 , (req , res)=>{
console.log("port is listening at port 8080");
})