Server: move static/client routes in controllers/

This commit is contained in:
Chocobozzz 2016-11-25 12:32:21 +01:00
parent 8e124f999b
commit 79530164b6
4 changed files with 68 additions and 28 deletions

View File

@ -2,7 +2,6 @@
// ----------- Node modules ----------- // ----------- Node modules -----------
const bodyParser = require('body-parser') const bodyParser = require('body-parser')
const cors = require('cors')
const express = require('express') const express = require('express')
const expressValidator = require('express-validator') const expressValidator = require('express-validator')
const http = require('http') const http = require('http')
@ -66,35 +65,17 @@ app.use(expressValidator({
// ----------- Views, routes and static files ----------- // ----------- Views, routes and static files -----------
// API routes // API
const apiRoute = '/api/' + constants.API_VERSION const apiRoute = '/api/' + constants.API_VERSION
app.use(apiRoute, routes.api) app.use(apiRoute, routes.api)
// Client files
app.use('/', routes.client) app.use('/', routes.client)
// Static client files // Static files
// TODO: move in client app.use('/', routes.static)
app.use('/client', express.static(path.join(__dirname, '/client/dist'), { maxAge: constants.STATIC_MAX_AGE }))
// 404 for static files not found
app.use('/client/*', function (req, res, next) {
res.sendStatus(404)
})
const torrentsPhysicalPath = constants.CONFIG.STORAGE.TORRENTS_DIR // Always serve index client page (the client is a single page application, let it handle routing)
app.use(constants.STATIC_PATHS.TORRENTS, cors(), express.static(torrentsPhysicalPath, { maxAge: constants.STATIC_MAX_AGE }))
// Videos path for webseeding
const videosPhysicalPath = constants.CONFIG.STORAGE.VIDEOS_DIR
app.use(constants.STATIC_PATHS.WEBSEED, cors(), express.static(videosPhysicalPath, { maxAge: constants.STATIC_MAX_AGE }))
// Thumbnails path for express
const thumbnailsPhysicalPath = constants.CONFIG.STORAGE.THUMBNAILS_DIR
app.use(constants.STATIC_PATHS.THUMBNAILS, express.static(thumbnailsPhysicalPath, { maxAge: constants.STATIC_MAX_AGE }))
// Video previews path for express
const previewsPhysicalPath = constants.CONFIG.STORAGE.PREVIEWS_DIR
app.use(constants.STATIC_PATHS.PREVIEWS, express.static(previewsPhysicalPath, { maxAge: constants.STATIC_MAX_AGE }))
// Always serve index client page
app.use('/*', function (req, res, next) { app.use('/*', function (req, res, next) {
res.sendFile(path.join(__dirname, './client/dist/index.html')) res.sendFile(path.join(__dirname, './client/dist/index.html'))
}) })
@ -136,6 +117,8 @@ app.use(function (err, req, res, next) {
res.sendStatus(err.status || 500) res.sendStatus(err.status || 500)
}) })
// ----------- Run -----------
const port = constants.CONFIG.LISTEN.PORT const port = constants.CONFIG.LISTEN.PORT
installer.installApplication(function (err) { installer.installApplication(function (err) {
if (err) throw err if (err) throw err

View File

@ -13,8 +13,9 @@ const Video = mongoose.model('Video')
const router = express.Router() const router = express.Router()
const opengraphComment = '<!-- opengraph tags -->' const opengraphComment = '<!-- opengraph tags -->'
const embedPath = path.join(__dirname, '../../client/dist/standalone/videos/embed.html') const distPath = path.join(__dirname, '../../client/dist')
const indexPath = path.join(__dirname, '../../client/dist/index.html') const embedPath = path.join(distPath, 'standalone/videos/embed.html')
const indexPath = path.join(distPath, 'index.html')
// Special route that add OpenGraph tags // Special route that add OpenGraph tags
// Do not use a template engine for a so little thing // Do not use a template engine for a so little thing
@ -24,6 +25,14 @@ router.use('/videos/embed', function (req, res, next) {
res.sendFile(embedPath) res.sendFile(embedPath)
}) })
// Static HTML/CSS/JS client files
router.use('/client', express.static(distPath, { maxAge: constants.STATIC_MAX_AGE }))
// 404 for static files not found
router.use('/client/*', function (req, res, next) {
res.sendStatus(404)
})
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
module.exports = router module.exports = router

View File

@ -2,8 +2,10 @@
const apiController = require('./api/') const apiController = require('./api/')
const clientController = require('./client') const clientController = require('./client')
const staticController = require('./static')
module.exports = { module.exports = {
api: apiController, api: apiController,
client: clientController client: clientController,
static: staticController
} }

View File

@ -0,0 +1,46 @@
'use strict'
const express = require('express')
const cors = require('cors')
const constants = require('../initializers/constants')
const router = express.Router()
/*
Cors is very important to let other pods access torrent and video files
*/
const torrentsPhysicalPath = constants.CONFIG.STORAGE.TORRENTS_DIR
router.use(
constants.STATIC_PATHS.TORRENTS,
cors(),
express.static(torrentsPhysicalPath, { maxAge: constants.STATIC_MAX_AGE })
)
// Videos path for webseeding
const videosPhysicalPath = constants.CONFIG.STORAGE.VIDEOS_DIR
router.use(
constants.STATIC_PATHS.WEBSEED,
cors(),
express.static(videosPhysicalPath, { maxAge: constants.STATIC_MAX_AGE })
)
// Thumbnails path for express
const thumbnailsPhysicalPath = constants.CONFIG.STORAGE.THUMBNAILS_DIR
router.use(
constants.STATIC_PATHS.THUMBNAILS,
express.static(thumbnailsPhysicalPath, { maxAge: constants.STATIC_MAX_AGE })
)
// Video previews path for express
const previewsPhysicalPath = constants.CONFIG.STORAGE.PREVIEWS_DIR
router.use(
constants.STATIC_PATHS.PREVIEWS,
express.static(previewsPhysicalPath, { maxAge: constants.STATIC_MAX_AGE })
)
// ---------------------------------------------------------------------------
module.exports = router