-
-
Notifications
You must be signed in to change notification settings - Fork 1.5k
/
Copy pathpreviewServer.js
112 lines (95 loc) · 2.77 KB
/
previewServer.js
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
import Express from 'express';
import mongoose from 'mongoose';
import path from 'path';
import webpack from 'webpack';
import cors from 'cors';
import webpackDevMiddleware from 'webpack-dev-middleware';
import webpackHotMiddleware from '@gatsbyjs/webpack-hot-middleware';
import config from '../webpack/config.dev';
import embedRoutes from './routes/embed.routes';
import assetRoutes from './routes/asset.routes';
import renderPreviewIndex from './views/previewIndex';
const app = new Express();
// This also works if you take out the mongoose connection
// but i have no idea why
const mongoConnectionString = process.env.MONGO_URL;
// Connect to MongoDB
const connectToMongoDB = async () => {
try {
mongoose.set('strictQuery', true);
await mongoose.connect(mongoConnectionString, {
useNewUrlParser: true,
useUnifiedTopology: true,
serverSelectionTimeoutMS: 30000, // 30 seconds timeout
socketTimeoutMS: 45000 // 45 seconds timeout
});
} catch (error) {
console.error('Failed to connect to MongoDB: ', error);
process.exit(1);
}
};
connectToMongoDB();
mongoose.connection.on('error', () => {
console.error(
'MongoDB Connection Error. Please make sure that MongoDB is running.'
);
process.exit(1);
});
const allowedCorsOrigins = [
/p5js\.org$/,
process.env.EDITOR_URL,
process.env.PREVIEW_URL
];
//
// to allow client-only development
if (process.env.CORS_ALLOW_LOCALHOST === 'true') {
allowedCorsOrigins.push(/localhost/);
}
// Enable Cross-Origin Resource Sharing (CORS)
const corsMiddleware = cors({
credentials: true,
origin: allowedCorsOrigins
});
app.use(corsMiddleware);
// Enable pre-flight OPTIONS route for all end-points
app.options('*', corsMiddleware);
app.use((req, res, next) => {
res.setHeader('Cross-Origin-Embedder-Policy', 'require-corp');
res.setHeader('Cross-Origin-Opener-Policy', 'same-origin');
next();
});
// Run Webpack dev server in development mode
if (process.env.NODE_ENV === 'development') {
const compiler = webpack(config);
app.use(
webpackDevMiddleware(compiler, {
publicPath: config.output.publicPath
})
);
app.use(webpackHotMiddleware(compiler, { log: false }));
}
app.use(
Express.static(path.resolve(__dirname, '../dist/static'), {
maxAge:
process.env.STATIC_MAX_AGE ||
(process.env.NODE_ENV === 'production' ? '1d' : '0')
})
);
app.get('/', (req, res) => {
res.send(renderPreviewIndex());
});
app.use('/', embedRoutes);
app.use('/', assetRoutes);
// Handle missing routes.
app.get('*', (req, res) => {
res.status(404);
res.type('txt').send('Not found.');
});
app.listen(process.env.PREVIEW_PORT, (error) => {
if (!error) {
console.log(
`p5.js Preview Server is running on port: ${process.env.PREVIEW_PORT}`
);
}
});
export default app;