-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.js
More file actions
129 lines (106 loc) · 3.72 KB
/
Copy pathapp.js
File metadata and controls
129 lines (106 loc) · 3.72 KB
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
require('dotenv').config();
const isProduction = process.env.NODE_ENV === "production";
const express = require("express");
const app = express();
const mongoose = require("mongoose");
const path = require("path");
const methodOverride = require("method-override");
const ejsMate = require("ejs-mate");
const {ExpressError} = require("./utils/ExpressError.js");
const session = require('express-session');
const MongoStore = require("connect-mongo");
const flash = require("connect-flash");
const User = require("./models/user.js");
const passport = require("passport");
const LocalStrategy = require("passport-local");
const listingRouter = require("./routes/listing.js");
const reviewRouter = require("./routes/review.js");
const userRouter = require("./routes/user.js");
app.set("view engine", "ejs");
app.set("views", path.join(__dirname, "views"));
app.use(express.urlencoded({extended: true}));
app.use(methodOverride("_method"));
app.engine("ejs", ejsMate);
app.use(express.static(path.join(__dirname, "/public")));
const dbUrl = process.env.ATLASDB_URL;
main().then(() => {
console.log("Connected to DB...!");
}).catch((err) => {
console.log(err);
});
async function main(){
// await mongoose.connect(MONGO_URL);
await mongoose.connect(dbUrl);
// console.log("DB Host:", mongoose.connection.host);
// console.log("DB Name:", mongoose.connection.name);
}
if (!dbUrl) {
console.error("CRITICAL ERROR: ATLASDB_URL is not defined in Railway Variables!");
}
const store = MongoStore.default.create({
mongoUrl: dbUrl,
crypto: {
secret:process.env.SESSION_SECRET,
},
touchAfter: 24 * 3600,
});
const sessionOptions = {
store,
secret:process.env.SESSION_SECRET,
resave: false,
saveUninitialized: false, //
cookie: {
// expires: Date.now() + 7 * 24 * 60 * 60 * 1000,
maxAge: 7 * 24 * 60 * 60 * 1000,
httpOnly: true,
secure: isProduction, // required in production
sameSite: isProduction ? "none" : "lax", // required in railway
}
};
app.set("trust proxy", 1); // Railway runs behind a proxy (HTTPS). Without this line, secure cookies won’t work properly.
app.use(session(sessionOptions));
app.use(flash());
app.use(passport.initialize());
app.use(passport.session());
passport.use(new LocalStrategy(User.authenticate()));
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
app.use((req, res, next)=> {
res.locals.success = req.flash("success");
res.locals.error = req.flash("error");
res.locals.currUser = req.user;
next();
});
app.get("/", (req, res) => {
res.redirect("/listings");
});
app.use("/listings", listingRouter);
app.use("/listings/:id/reviews", reviewRouter);
app.use("/", userRouter);
// app.get("/testListening", async (req, res) => {
// const samplelist = new Listing({
// title: "My first Villa",
// discription: "Near the beach",
// price: 12000,
// location: "peer Mitha, Jammu",
// country: "India"
// });
// await samplelist.save();
// console.log('Sample was saved');
// res.send("Successfull Testing");
// });
// ab yeh listing tbhi add hogi hab testListening link pr jayenge
// Error Handling Middleware
// replace app.all with this in newer versions of express
app.use((req, res, next) => {
next(new ExpressError(404, "Page Not Found!"));
});
app.use((err, req, res, next) => {
let {statusCode = 500, message = "Something Went Wrong"} = err;
// res.status(statusCode).send("Something Went Wrong!");
res.status(statusCode).render("listings/error.ejs", {err});
});
const port = process.env.PORT || 8080;
app.listen(port, () => {
console.log(`Server is Listening on port ${port}`);
});