-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathapp.js
More file actions
104 lines (94 loc) · 2.81 KB
/
Copy pathapp.js
File metadata and controls
104 lines (94 loc) · 2.81 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
const express = require("express");
const morgan = require("morgan");
const rateLimit = require("express-rate-limit");
const helmet = require("helmet");
const MongoSanitize = require("express-mongo-sanitize");
const xss = require("xss-clean");
const hpp = require("hpp");
const cookieParser = require("cookie-parser");
const cors = require("cors");
require("./db/mongo");
const bookingRouter = require("./routes/bookingRouter");
const tourRouter = require("./routes/tourRouter");
const userRouter = require("./routes/userRouter");
const reviewRouter = require("./routes/reviewRouter");
const viewRouter = require("./routes/viewRouter");
const bookingController = require("./controllers/bookingController");
const AppError = require("./utils/appError.js");
const globalErrorController = require("./controllers/errorController");
const app = express();
const limiter = rateLimit({
max: 100,
message: "too many limits ,try again in an hour",
windowMs: 60 * 60 * 1000 //time
});
// middleWARE
//for security headers
app.use(helmet());
//for limiting reqest by ip
app.use("/api", limiter);
//for serving static files
app.use(express.static(`${__dirname}/public`));
//for logging req
app.use(morgan("dev"));
//integrating stripe checkout,have to before json parser
app.post(
"/webhook-checkout",
express.raw({ type: "application/json" }),
bookingController.webhookCheckout
);
//for parsing json into req.body
app.use(express.json({ limit: "10kb" }));
//for parsing cookies
app.use(cookieParser());
//for filtering out Nosql querry injection
app.use(MongoSanitize());
//for filtering out XSS scripts
app.use(xss());
//preventing parameter pollution
app.use(
hpp({
whitelist: ["duration", "price"]
})
);
//for trusting proxy on heroku and production
app.enable("trust proxy");
//setting view engine
app.set("view engine", "pug");
app.set("views", `${__dirname}/views`);
//using cors
app.use(cors());
app.options("*", cors());
//for parsing data that is coming from form
app.use(express.urlencoded({ extended: true }));
// making routes here
// app.get(
// "/api/v1/bookings/checkout-session/5c88fa8cf4afda39709c2955",
// (req, res) => {
// console.log("hello");
// }
// );
//views
app.use("/", viewRouter);
//user
app.use("/api/v1", userRouter);
//tour
app.use("/api/v1", tourRouter);
//review
app.use("/api/v1/review", reviewRouter);
//bokings
app.use("/api/v1/bookings", bookingRouter);
//when no page is match
app.all("*", (req, res, next) => {
// res.status(404).json({
// status: "fail",
// message: "cant find anything"
// });
// const err = new Error("cant find anything with your requested url");
// err.statusCode = 400;
// err.status = "not found";
next(new AppError("cant find anything with your requested url", 404));
});
//error handling middle middleWARE
app.use(globalErrorController);
module.exports = app;