Server: move static/client routes in controllers/

pull/24/head
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 -----------
const bodyParser = require('body-parser')
const cors = require('cors')
const express = require('express')
const expressValidator = require('express-validator')
const http = require('http')
@ -66,35 +65,17 @@ app.use(expressValidator({
// ----------- Views, routes and static files -----------
// API routes
// API
const apiRoute = '/api/' + constants.API_VERSION
app.use(apiRoute, routes.api)
// Client files
app.use('/', routes.client)
// Static client files
// TODO: move in client
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)
})
// Static files
app.use('/', routes.static)
const torrentsPhysicalPath = constants.CONFIG.STORAGE.TORRENTS_DIR
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
// Always serve index client page (the client is a single page application, let it handle routing)
app.use('/*', function (req, res, next) {
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)
})
// ----------- Run -----------
const port = constants.CONFIG.LISTEN.PORT
installer.installApplication(function (err) {
if (err) throw err

View File

@ -13,8 +13,9 @@ const Video = mongoose.model('Video')
const router = express.Router()
const opengraphComment = '<!-- opengraph tags -->'
const embedPath = path.join(__dirname, '../../client/dist/standalone/videos/embed.html')
const indexPath = path.join(__dirname, '../../client/dist/index.html')
const distPath = path.join(__dirname, '../../client/dist')
const embedPath = path.join(distPath, 'standalone/videos/embed.html')
const indexPath = path.join(distPath, 'index.html')
// Special route that add OpenGraph tags
// 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)
})
// 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

View File

@ -2,8 +2,10 @@
const apiController = require('./api/')
const clientController = require('./client')
const staticController = require('./static')
module.exports = {
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