Something went wrong. Try again.
VueTube is a YouTube clone built with nodejs, expressjs & mongodb. This is the RESTful API repository.
Something went wrong. Try again.
youtube-clone-nodejs-api app.js
2.8 kB · 110 lines
JavaScript
at master
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111const express = require('express')const path = require('path')const dotenv = require('dotenv')const colors = require('colors')const morgan = require('morgan')const cookieParser = require('cookie-parser')const mongoSanitize = require('express-mongo-sanitize')const fileupload = require('express-fileupload')const helmet = require('helmet')const xss = require('xss-clean')const rateLimit = require('express-rate-limit')const hpp = require('hpp')const cors = require('cors')
const errorHandler = require('./middleware/error')
const DBConnection = require('./config/db')
dotenv.config({ path: './config/.env' })
DBConnection()
const authRoutes = require('./routes/auth')const userRoutes = require('./routes/users')const categoryRoutes = require('./routes/categories')const videoRoutes = require('./routes/videos')const commentRoutes = require('./routes/comments')const replyRoutes = require('./routes/replies')const feelingRoutes = require('./routes/feelings')const subscriptionRoutes = require('./routes/subscriptions')const historiesRoutes = require('./routes/histories')const searchRoutes = require('./routes/search')
const app = express()
app.use(express.json())
app.use(cookieParser())
if (process.env.NODE_ENV === 'development') { app.use(morgan('dev'))}
// File uploadingapp.use( fileupload({ createParentPath: true }))
// Sanitize dataapp.use(mongoSanitize())
// Set security headersapp.use(helmet())
// Prevent XSS attacksapp.use(xss())
// Enable CORSapp.use(cors())
// Rate limiting// const limiter = rateLimit({// windowMs: 10 * 60 * 1000, // 10 mins// max: 100 // 100 request per 10 mins// })
// app.use(limiter)
// Prevent http param pollutionapp.use(hpp())
app.use(express.static(path.join(__dirname, 'public')))
// app.use((req, res, next) => {// setTimeout(() => {// next()// }, 1000)// })
const versionOne = (routeName) => `/api/v1/${routeName}`
app.use(versionOne('auth'), authRoutes)app.use(versionOne('users'), userRoutes)app.use(versionOne('categories'), categoryRoutes)app.use(versionOne('videos'), videoRoutes)app.use(versionOne('comments'), commentRoutes)app.use(versionOne('replies'), replyRoutes)app.use(versionOne('feelings'), feelingRoutes)app.use(versionOne('subscriptions'), subscriptionRoutes)app.use(versionOne('histories'), historiesRoutes)app.use(versionOne('search'), searchRoutes)
app.use(errorHandler)
const PORT = process.env.PORT
const server = app.listen(PORT, () => { console.log( `We are live on ${process.env.NODE_ENV} mode on port ${PORT}`.yellow.bold )})
// Handle unhandled promise rejectionsprocess.on('unhandledRejection', (err, promise) => { console.log(`Error: ${err.message}`.red) // Close server & exit process server.close(() => process.exit(1))})