Skip to content
This repository was archived by the owner on Feb 28, 2019. It is now read-only.

Commit d9fd15c

Browse files
author
Roman Kinyakin
committed
Update SPA components
1 parent 282807b commit d9fd15c

File tree

5 files changed

+76
-83
lines changed

5 files changed

+76
-83
lines changed

backpack.config.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ module.exports = {
55

66
webpack: (config, options, webpack) => {
77
config.entry.main = './server.js'
8-
config.entry.echo = './nodejs/echo.js'
8+
config.entry.echo = './echo.js'
9+
config.entry.proxy = './proxy.js'
910

1011
return config
1112
},

nodejs/app.js

Lines changed: 33 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -1,92 +1,43 @@
1-
const config = require('./config')
1+
module.exports = () => {
2+
const config = require('./config')
23

3-
let debug = require('debug')
4+
const debug = require('debug')('viblo-frontend')
45

5-
// Import and Set Nuxt.js options
6-
if (config.debug) {
7-
debug.enable('*')
8-
}
9-
10-
debug = debug('viblo-frontend')
11-
12-
debug('Loading components.')
13-
14-
const nuxt = require('./nuxt')
15-
const session = require('./session')
16-
const proxy = require('./proxy')
17-
const router = require('./router')
18-
const cookie = require('cookie-parser')()
19-
const csrf = require('csurf')()
20-
const axios = require('axios')
21-
const viewCounter = require('./middleware/views')
22-
23-
debug('Components loaded.')
24-
25-
const app = require('express')()
6+
debug('Loading components.')
267

27-
process.on('unhandledRejection', r => console.log(r))
8+
const session = require('./session')
9+
const cookie = require('cookie-parser')()
10+
const csrf = require('csurf')()
2811

29-
app.use(session)
30-
app.use(cookie)
31-
app.use(csrf)
12+
debug('Components loaded.')
3213

33-
axios.interceptors.request.use(function (request) {
34-
if (request.url.startsWith(config.node.url + '/api')) {
35-
let url = config.api.url + request.url.substr(config.node.url.length + 4)
36-
debug(request.url + ' > ' + url)
37-
request.url = url
38-
}
39-
return request
40-
})
14+
const app = require('express')()
4115

42-
axios.interceptors.response.use(function (response) {
43-
return response
44-
}, function (error) {
45-
if (error.response) {
46-
console.log(error.response.data)
47-
} else {
48-
console.log(error)
49-
}
50-
return Promise.reject(error)
51-
})
16+
app.use(session)
17+
app.use(cookie)
18+
app.use(csrf)
5219

53-
app.use((req, res, next) => {
54-
if (req.session && req.session.token) {
55-
// Temporary workaround to inject token into server-side requests
56-
// after finished refactoring of API routes, must be changed
57-
let authorization = `${req.session.token.token_type} ${req.session.token.access_token}`
58-
axios.defaults.headers.common['Authorization'] = authorization
59-
}
60-
next()
61-
})
20+
app.use((req, res, next) => {
21+
res.cookie('XSRF-TOKEN', req.csrfToken(), {})
22+
res.locals.csrftoken = req.csrfToken()
23+
next()
24+
})
6225

63-
app.use((req, res, next) => {
64-
res.cookie('XSRF-TOKEN', req.csrfToken(), {})
65-
res.locals.csrftoken = req.csrfToken()
66-
next()
67-
})
26+
app.use((req, res, next) => {
27+
// Share public config to frontend
28+
req.config = config
29+
next()
30+
})
6831

69-
app.use((req, res, next) => {
70-
// Share public config to frontend
71-
req.config = config
72-
next()
73-
})
32+
app.use((req, res, next) => {
33+
if (req.session && (req.session.token || req.session.user || req.session.settings)) {
34+
res.header('Cache-Control', 'no-cache, no-store, must-revalidate')
35+
res.header('Pragma', 'no-cache')
36+
} else {
37+
res.header('Cache-Control', 'public, max-age=5')
38+
}
39+
next()
40+
})
7441

75-
router.get(['/:user/posts/:post', '/api/posts/:post', '/p/:post'], viewCounter)
76-
77-
app.use('/api', proxy)
78-
app.use('/', router)
79-
80-
app.use('/admin', (req, res, next) => {
81-
if (!req.session || !req.session.user || !req.session.user.admin_access) {
82-
res.redirect('/')
83-
} else {
84-
return next()
85-
}
86-
})
87-
88-
app.get('/sitemap.xml', require('./routes/sitemap'))
89-
90-
app.use(nuxt.render)
91-
92-
module.exports = app
42+
return app
43+
}

nodejs/config.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ let makeHostConfig = (env, prefix) => {
1919

2020
let url = protocol + '://' + host + (port === default_port ? '' : ':' + port)
2121

22+
process.env[prefix + '_URL'] = url
23+
2224
return {
2325
host,
2426
port,
@@ -37,6 +39,7 @@ const atom = {
3739
module.exports = {
3840
node: makeHostConfig(process.env, 'NODE'),
3941
api: makeHostConfig(process.env, 'API'),
42+
proxy: makeHostConfig(process.env, 'PROXY'),
4043
external: makeHostConfig(process.env, 'APP'),
4144
websocket: {
4245
host: process.env.ECHO_HOST || 'localhost',

nodejs/server.proxy.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
const app = require('./app')()
2+
const config = require('./config')
3+
4+
const viewCounter = require('./middleware/views')
5+
const proxy = require('./proxy')
6+
7+
app.get([
8+
'/api/api/admin',
9+
'/api/api/user',
10+
'/api/api/notifications',
11+
'/api/api/publish',
12+
'/api/settings',
13+
], (req, res, next) => {
14+
res.header('Cache-Control', 'no-cache, no-store, must-revalidate')
15+
res.header('Pragma', 'no-cache')
16+
next()
17+
})
18+
19+
app.get(['/api/posts/:post'], viewCounter)
20+
21+
app.use('/api', proxy)
22+
23+
module.exports = {
24+
listen: (port = null, host = null) => new Promise((resolve, reject) => {
25+
app.on('error', (e) => {
26+
reject(e)
27+
})
28+
app.set('port', port || config.proxy.port)
29+
app.listen(port || config.proxy.port, host || config.proxy.host, () => resolve(app))
30+
})
31+
}

proxy.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
const app = require('./nodejs/server.proxy')
2+
3+
app.listen().then(() => console.log('Proxy server is running.')) // eslint-disable-line no-console)
4+
.catch((error) => {
5+
console.error(error) // eslint-disable-line no-console
6+
process.exit(1)
7+
})

0 commit comments

Comments
 (0)