forked from 3V2T/bookstore
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.js
99 lines (86 loc) · 3.63 KB
/
server.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
require('dotenv').config()
require('express-async-errors')
const express = require('express')
const app = express()
var morgan = require('morgan')
const path = require('path')
const fileUpload = require('express-fileupload') // xử lí các file được up lên
const cloudinary = require('cloudinary').v2
cloudinary.config({
// có thể lấy 3 giá trị này trên account cloudinary
cloud_name: process.env.CLOUD_NAME, //Tên của tài khoản Cloudinary của bạn.
api_key: process.env.CLOUD_API_KEY, //Khóa API (API Key) của bạn để xác thực với dịch vụ Cloudinary.
api_secret: process.env.CLOUD_API_SECRET, // Khóa bí mật (API Secret) của bạn để ký và xác thực các yêu cầu đến Cloudinary API
}) // để có thể up lên cloud cần một object gồm 3 properties bắt buộc
const cookieParser = require('cookie-parser') // dùng để đính kèm cookie vào response
// router
const authorRouter = require('./routes/author.router')
const bookRouter = require('./routes/book.router')
const categoryRouter = require('./routes/category.router')
const userRouter = require('./routes/user.router')
const authRouter = require('./routes/auth.router')
const publisherRouter = require('./routes/publisher.router')
const orderRouter = require('./routes/order.router')
const reviewRouter = require('./routes/review.router')
const orderItemRouter = require('./routes/oder_item.router')
const couponRouter = require('./routes/coupon.router')
// middleware
const notFoundMiddleware = require('./middleware/not-found')
const errorHandlerMiddleware = require('./middleware/error-handler')
// secure
const rateLimiter = require('express-rate-limit')
const helmet = require('helmet')
const xss = require('xss-clean')
const cors = require('cors')
const mongoSanitize = require('express-mongo-sanitize')
app.use(morgan('tiny'))
app.set('trust proxy', 1)
// app.use(
// rateLimiter({
// windowMs: 15 * 60 * 1000,
// max: 60,
// })
// )
app.use(helmet())
app.use(
cors({
origin: [
'http://localhost:5173',
'https://bookstore.ayclqt.id.vn',
'https://[2606:50c0:8000::153]',
'https://[2606:50c0:8001::153]',
'https://[2606:50c0:8002::153]',
'https://[2606:50c0:8003::153]',
'https://my.payos.vn/',
'https://pay.payos.vn/',
],
credentials: true,
})
)
app.use(xss())
app.use(mongoSanitize())
// app.use(express.static(path.resolve(__dirname, './client/dist', 'index.html')))
app.use(express.static(path.resolve(__dirname, './client/dist')))
app.use(express.json())
app.use(fileUpload({ useTempFiles: true })) // các file dc up lên sẽ lưu trữ trong folder temp
app.use(cookieParser(process.env.JWT_SECRET))
// Trong cookie-parser, đối số đầu tiên được truyền vào là secret key, và nó được sử dụng để ký (sign) cookie. Việc ký cookie giúp đảm bảo tính toàn vẹn của cookie và ngăn chặn bất kỳ sửa đổi nào từ phía máy khách.
app.use('/api/v1/books', bookRouter)
app.use('/api/v1/authors', authorRouter)
app.use('/api/v1/categories', categoryRouter)
app.use('/api/v1/users', userRouter)
app.use('/api/v1/auth', authRouter)
app.use('/api/v1/publishers', publisherRouter)
app.use('/api/v1/orders', orderRouter)
app.use('/api/v1/reviews', reviewRouter)
app.use('/api/v1/orderItems', orderItemRouter)
app.use('/api/v1/coupons', couponRouter)
app.get('*', (req, res) => {
res.sendFile(path.resolve(__dirname, './client/dist', 'index.html'))
})
app.use(notFoundMiddleware)
app.use(errorHandlerMiddleware)
const port = process.env.PORT || '5000'
app.listen(port, () => {
console.log('Server is running on port', port)
})