feat: enable ssr and serve it with the api

This commit is contained in:
Pitu 2021-01-20 14:01:36 +09:00
parent 68fcbcb545
commit 91a15f417e
4 changed files with 9 additions and 25 deletions

View File

@ -16,7 +16,7 @@ const clientConfig = {
};
export default {
mode: 'spa',
ssr: true,
server: {
port: process.env.WEBSITE_PORT
},
@ -66,7 +66,6 @@ export default {
'~/plugins/vue-isyourpasswordsafe',
'~/plugins/vue-timeago',
'~/plugins/vuebar',
'~/plugins/nuxt-client-init',
'~/plugins/notifier',
'~/plugins/handler'
],

View File

@ -5,6 +5,7 @@ if (!process.env.SERVER_PORT) {
process.exit(0);
}
const { loadNuxt, build } = require('nuxt');
const express = require('express');
const helmet = require('helmet');
const cors = require('cors');
@ -80,25 +81,13 @@ class Server {
});
}
serveNuxt() {
// Serve the frontend if we are in production mode
if (process.env.NODE_ENV === 'production') {
this.server.use(express.static(path.join(__dirname, '../../../dist')));
async serveNuxt() {
const isProd = process.env.NODE_ENV === 'production';
const nuxt = await loadNuxt(isProd ? 'start' : 'dev');
this.server.use(nuxt.render);
if (!isProd) {
build(nuxt);
}
/*
For vue router to work with express we need this fallback.
After all the routes are loaded and the static files handled and if the
user is trying to access a non-mapped route we serve the website instead
since it has routes of it's own that don't work if accessed directly
*/
this.server.all('*', (_req, res) => {
try {
res.sendFile(path.join(__dirname, '../../../dist/index.html'));
} catch (error) {
res.json({ success: false, message: 'Something went wrong' });
}
});
}
createJobs() {

View File

@ -1,3 +0,0 @@
export default async ctx => {
await ctx.store.dispatch('nuxtClientInit', ctx);
};

View File

@ -1,9 +1,8 @@
import config from '../../../dist/config.json';
export const actions = {
async nuxtClientInit({ commit, dispatch }) {
async nuxtServerInit({ commit, dispatch }) {
commit('config/set', config);
const cookies = this.$cookies.getAll();
if (!cookies.token) return dispatch('auth/logout');