server.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. let express = require('express')
  2. let app = express()
  3. let { sequelize } = require('./models')
  4. let sockets = require('./lib/sockets')
  5. let config = require('./config/server.js')
  6. //Middle-ware
  7. let bodyParser = require('body-parser')
  8. let expressSession = require('express-session')
  9. let SequelizeStore = require('connect-session-sequelize')(expressSession.Store)
  10. let compression = require('compression')
  11. let helmet = require('helmet')
  12. let path = require('path')
  13. let session = expressSession({
  14. secret: config.sessionSecret,
  15. resave: true,
  16. saveUninitialized: true,
  17. store: new SequelizeStore({ db: sequelize })
  18. })
  19. if(process.env.NODE_ENV === 'production') {
  20. app.set('trust proxy', 1);
  21. }
  22. app.use(helmet())
  23. app.use(compression())
  24. app.use(bodyParser.json({ limit: '5mb' }))
  25. app.use(bodyParser.urlencoded({ extended: true }))
  26. app.use(session)
  27. if(process.env.NODE_ENV !== 'test' && process.env.NODE_ENV !== 'production') {
  28. app.use(require('morgan')('dev'))
  29. }
  30. app.use('/api/v1/user', require('./routes/user'))
  31. app.use('/api/v1/admin_token', require('./routes/admin_token'))
  32. app.use('/api/v1/category', require('./routes/category'))
  33. app.use('/api/v1/thread', require('./routes/thread'))
  34. app.use('/api/v1/notification', require('./routes/notification'))
  35. app.use('/api/v1/post', require('./routes/post'))
  36. app.use('/api/v1/settings', require('./routes/settings'))
  37. app.use('/api/v1/report', require('./routes/report'))
  38. app.use('/api/v1/ban', require('./routes/ban'))
  39. app.use('/api/v1/search', require('./routes/search'))
  40. app.use('/api/v1/log', require('./routes/log'))
  41. app.use('/api/v1/poll', require('./routes/poll'))
  42. app.use('/api/v1/link_preview', require('./routes/link_preview'))
  43. app.use('/static', express.static(path.join(__dirname, 'frontend', 'dist')))
  44. app.get('*', (req, res) => {
  45. res.sendFile(path.join(__dirname, 'frontend', 'dist', 'index.html'))
  46. })
  47. app.use(require('./lib/errorHandler'))
  48. function main () {
  49. let server = app.listen(config.port, () => {
  50. console.log('Listening on ' + config.port)
  51. app.locals.appStarted = true
  52. app.emit('appStarted')
  53. })
  54. sockets.init(app, server, session)
  55. }
  56. if(process.env.NODE_ENV === 'test') {
  57. sequelize.sync({ force: true }).then(main)
  58. } else {
  59. main()
  60. }
  61. module.exports = app