1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
|
const Backend = require('./api/structures/Server');
const express = require('express');
const compression = require('compression');
// const ream = require('ream');
const config = require('../config');
const path = require('path');
const log = require('./api/utils/Log');
const dev = process.env.NODE_ENV !== 'production';
const oneliner = require('one-liner');
const jetpack = require('fs-jetpack');
// const { Nuxt, Builder } = require('nuxt-edge');
// const nuxtConfig = require('./nuxt/nuxt.config.js');
function startProduction() {
startAPI();
// startSite();
// startNuxt();
}
function startAPI() {
writeFrontendConfig();
new Backend().start();
}
async function startNuxt() {
/*
Make sure the frontend has enough data to prepare the service
*/
writeFrontendConfig();
/*
Starting Nuxt's custom server powered by express
*/
const app = express();
/*
Instantiate Nuxt.js
*/
nuxtConfig.dev = true;
const nuxt = new Nuxt(nuxtConfig);
/*
Start the server or build it if we're on dev mode
*/
if (nuxtConfig.dev) {
try {
await new Builder(nuxt).build();
} catch (error) {
log.error(error);
process.exit(1);
}
}
/*
Render every route with Nuxt.js
*/
app.use(nuxt.render);
/*
Start the server and listen to the configured port
*/
app.listen(config.server.ports.frontend, '127.0.0.1');
log.info(`> Frontend ready and listening on port ${config.server.ports.frontend}`);
/*
Starting Nuxt's custom server powered by express
*/
/*
const app = express();
app.set('port', config.server.ports.frontend);
// Configure dev enviroment
nuxtConfig.dev = dev;
// Init Nuxt.js
const nuxt = new Nuxt(nuxtConfig);
// Build only in dev mode
if (nuxtConfig.dev) {
const builder = new Builder(nuxt);
await builder.build();
}
// Give nuxt middleware to express
app.use(nuxt.render);
if (config.serveFilesWithNode) {
app.use('/', express.static(`./${config.uploads.uploadFolder}`));
}
// Listen the server
app.listen(config.server.ports.frontend, '127.0.0.1');
app.on('renderer-ready', () => log.info(`> Frontend ready and listening on port ${config.server.ports.frontend}`));
// log.success(`> Frontend ready and listening on port ${config.server.ports.frontend}`);
// console.log(`Server listening on http://${host}:${port}`); // eslint-disable-line no-console
*/
}
function startSite() {
/*
Make sure the frontend has enough data to prepare the service
*/
writeFrontendConfig();
/*
Starting ream's custom server
*/
const server = express();
const app = ream({
dev,
entry: path.join(__dirname, 'site', 'index.js')
});
app.getRequestHandler().then(handler => {
server.use(compression());
/*
This option is mostly for development, since serving the files with nginx is better.
*/
if (config.serveFilesWithNode) {
server.use('/', express.static(`./${config.uploads.uploadFolder}`));
}
server.get('*', handler);
server.listen(config.server.ports.frontend, error => {
if (error) log.error(error);
});
});
app.on('renderer-ready', () => log.info(`> Frontend ready and listening on port ${config.server.ports.frontend}`));
}
function writeFrontendConfig() {
/*
Since ream can't execute getInitialData on non-routes we write a config file for it.
*/
const template = oneliner`
module.exports = {
version: '${process.env.npm_package_version}',
URL: '${config.filesServeLocation}',
baseURL: '${config.backendLocation}',
serviceName: '${config.serviceName}',
maxFileSize: '${config.uploads.uploadMaxSize}',
chunkSize: '${config.uploads.chunkSize}',
maxLinksPerAlbum: '${config.albums.maxLinksPerAlbum}'
}`;
jetpack.write(path.join(__dirname, 'site', 'config.js'), template);
log.success('Frontend config file generated successfully');
}
/*
Having multiple files for different scripts was mendokusai.
*/
const args = process.argv[2];
if (!args) startProduction();
else if (args === 'api') startAPI();
else if (args === 'site') startNuxt();
else process.exit(0);
|