crm-api-template-generator/backend/app.js

73 lines
1.6 KiB
JavaScript
Raw Permalink Normal View History

2023-11-29 20:05:48 +00:00
require('dotenv').config()
require('express-async-errors')
const { socketIO } = require('./utils')
const { initIO, getIO } = socketIO
// express
const express = require('express')
const app = express()
const session = require('express-session')
// rest of the packages
const morgan = require('morgan')
// const fileUpload = require('express-fileupload')
const rateLimiter = require('express-rate-limit')
// Swagger
const swaggerUI = require('swagger-ui-express')
const YAML = require('yamljs')
const swaggerDocument = YAML.load('./swagger.yaml')
const helmet = require('helmet')
const xss = require('xss-clean')
const cors = require('cors')
// routers
const crmRouter = require('./routes/crmRoute')
const notFoundMiddlware = require('./middleware/not-found')
const errorHandlerMiddleware = require('./middleware/error-handler')
//middleware
app.set('trust proxy', 1)
app.use(rateLimiter({
windowMs: 15 * 60 * 1000,
max: 60,
}))
// Use a session to keep track of client ID
app.use(session({
secret: Math.random().toString(36).substring(2),
resave: false,
saveUninitialized: true
}))
// Security packages
app.use(helmet())
app.use(cors())
app.use(xss())
app.use(morgan('tiny'))
app.use(express.json())
// app.use(fileUpload())
app.get('/', (req, res) => {
res.send('<h1>Sentiment API</h1><a href="/api-docs">Documentation</a>')
})
app.use('/api-docs', swaggerUI.serve, swaggerUI.setup(swaggerDocument))
app.use('/api/v1/crm', crmRouter)
app.use(notFoundMiddlware)
app.use(errorHandlerMiddleware)
const port = process.env.PORT || 3000
const server = app.listen(port, console.log(`Listening on port: ${port}...`))
initIO(server)