-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.js
87 lines (73 loc) · 2.51 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
const path = require('path');
const express = require('express');
const morgan = require('morgan');
const helmet = require('helmet');
const bodyParser = require('body-parser');
const cookieParser = require('cookie-parser');
const compression = require('compression');
const cors = require('cors');
const rateLimit = require('express-rate-limit');
const routerPosts = require('./routes/postRoutes');
const routerUsers = require('./routes/userRoutes');
const routerComments = require('./routes/commentRouter');
const routerViews = require('./routes/viewRouter');
const AppError = require('./utils/appError');
const errorHanler = require('./middlewares/error');
const app = express();
app.enable('trust proxy');
app.set('trust proxy', ip => {
if (
ip === '13.228.225.19' ||
ip === '18.142.128.26' ||
ip === '54.254.162.138' ||
ip === '216.24.57.3' ||
ip === '216.24.57.253'
)
return true; // trusted IPs
return false;
});
app.use(
cors({
origin: '/',
credentials: true,
}),
);
app.options('*', cors());
app.use(compression({ level: +process.env.COMPRESSION_LEVEL }));
app.set('view engine', 'pug');
app.set('views', path.join(__dirname, 'views'));
app.use(express.static(path.join(__dirname, 'public')));
app.use(helmet({ contentSecurityPolicy: false }));
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 minutes
max: 30, // Limit each IP to 100 requests per `window` (here, per 15 minutes)
standardHeaders: true, // Return rate limit info in the `RateLimit-*` headers
legacyHeaders: false, // Disable the `X-RateLimit-*` headers
// store: ... , // Use an external store for more precise rate limiting
handler: (req, res, next) =>
res.status(429).json({
status: 'fails',
message: 'Too much request sent, please wait to send again',
}),
});
app.use(limiter);
//middleware
// app.use(express.static(``));
// app.use(express.json());
app.use(cookieParser());
app.use(bodyParser.json({ limit: '90kb' }));
app.use(bodyParser.urlencoded({ limit: '90kb', extended: true }));
if (process.env.NODE_ENV === 'development') app.use(morgan('dev'));
//router web server
//router api
app.use('/api/v1/users', routerUsers);
app.use('/api/v1/posts', routerPosts);
app.use('/api/v1/comments', routerComments);
app.use('/', routerViews);
// handle for not defined route
app.all('*', (req, res, next) => {
// const err = new AppError(`Error for link ${req.originalUrl}`, 404);
next(new AppError(`Error for link ${req.originalUrl}`, 404));
});
app.use(errorHanler);
module.exports = app;