fix: streaming
This commit is contained in:
parent
3db7bb423f
commit
8ae2f59e19
|
@ -36,7 +36,6 @@
|
||||||
"assert": "^2.1.0",
|
"assert": "^2.1.0",
|
||||||
"autoprefixer": "^10.4.17",
|
"autoprefixer": "^10.4.17",
|
||||||
"before-build-webpack": "^0.2.13",
|
"before-build-webpack": "^0.2.13",
|
||||||
"body-parser": "^1.20.2",
|
|
||||||
"browserify-zlib": "^0.2.0",
|
"browserify-zlib": "^0.2.0",
|
||||||
"buffer": "^6.0.3",
|
"buffer": "^6.0.3",
|
||||||
"clean-webpack-plugin": "4.0.0",
|
"clean-webpack-plugin": "4.0.0",
|
||||||
|
|
|
@ -5,7 +5,6 @@ import {PassThrough, Transform} from 'stream';
|
||||||
|
|
||||||
import {D} from '@flecks/core';
|
import {D} from '@flecks/core';
|
||||||
import {binaryPath, spawnWith} from '@flecks/core/server';
|
import {binaryPath, spawnWith} from '@flecks/core/server';
|
||||||
import bodyParser from 'body-parser';
|
|
||||||
import compression from 'compression';
|
import compression from 'compression';
|
||||||
import express from 'express';
|
import express from 'express';
|
||||||
import httpProxy from 'http-proxy';
|
import httpProxy from 'http-proxy';
|
||||||
|
@ -36,7 +35,7 @@ const deliverHtmlStream = async (stream, req, res, flecks) => {
|
||||||
}
|
}
|
||||||
catch (error) {
|
catch (error) {
|
||||||
if (error instanceof Abort) {
|
if (error instanceof Abort) {
|
||||||
res.status(500).end();
|
res.status(res.statusCode || 500).end();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
throw error;
|
throw error;
|
||||||
|
@ -52,11 +51,13 @@ export const createHttpServer = async (flecks) => {
|
||||||
trust,
|
trust,
|
||||||
} = flecks.get('@flecks/web');
|
} = flecks.get('@flecks/web');
|
||||||
const app = express();
|
const app = express();
|
||||||
|
app.disable('x-powered-by');
|
||||||
app.set('trust proxy', trust);
|
app.set('trust proxy', trust);
|
||||||
const httpServer = createServer(app);
|
const httpServer = createServer(app);
|
||||||
httpServer.app = app;
|
httpServer.app = app;
|
||||||
// Body parser.
|
// Body parser.
|
||||||
app.use(bodyParser.json());
|
app.use(express.urlencoded({extended: true}));
|
||||||
|
app.use(express.json());
|
||||||
// Compression. heheh
|
// Compression. heheh
|
||||||
app.use(compression({level: 'production' === NODE_ENV ? 6 : 9}));
|
app.use(compression({level: 'production' === NODE_ENV ? 6 : 9}));
|
||||||
// Socket connection.
|
// Socket connection.
|
||||||
|
@ -81,7 +82,7 @@ export const createHttpServer = async (flecks) => {
|
||||||
const actualPort = 0 === port ? httpServer.address().port : port;
|
const actualPort = 0 === port ? httpServer.address().port : port;
|
||||||
debug(
|
debug(
|
||||||
'HTTP server up @ %s!',
|
'HTTP server up @ %s!',
|
||||||
[host, actualPort].filter((e) => !!e).join(':'),
|
new URL(`http://${[host, actualPort].filter((e) => !!e).join(':')}`),
|
||||||
);
|
);
|
||||||
if ('undefined' === typeof publicConfig) {
|
if ('undefined' === typeof publicConfig) {
|
||||||
flecks.web.public = [host, actualPort].join(':');
|
flecks.web.public = [host, actualPort].join(':');
|
||||||
|
@ -181,7 +182,7 @@ export const createHttpServer = async (flecks) => {
|
||||||
res.statusCode = proxyRes.statusCode;
|
res.statusCode = proxyRes.statusCode;
|
||||||
// HTML.
|
// HTML.
|
||||||
if (proxyRes.headers['content-type']?.match('text/html')) {
|
if (proxyRes.headers['content-type']?.match('text/html')) {
|
||||||
routeMiddleware(req, res, (error) => {
|
routeMiddleware(req, res, async (error) => {
|
||||||
if (error) {
|
if (error) {
|
||||||
// eslint-disable-next-line no-console
|
// eslint-disable-next-line no-console
|
||||||
console.error(error);
|
console.error(error);
|
||||||
|
@ -191,7 +192,14 @@ export const createHttpServer = async (flecks) => {
|
||||||
if (!res.headersSent) {
|
if (!res.headersSent) {
|
||||||
res.setHeader('Content-Type', proxyRes.headers['content-type']);
|
res.setHeader('Content-Type', proxyRes.headers['content-type']);
|
||||||
}
|
}
|
||||||
deliverHtmlStream(proxyRes, req, res, flecks);
|
try {
|
||||||
|
await deliverHtmlStream(proxyRes, req, res, flecks);
|
||||||
|
}
|
||||||
|
catch (error) {
|
||||||
|
// eslint-disable-next-line no-console
|
||||||
|
console.error(error);
|
||||||
|
res.status(error.code || 500).end(error.stack);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
// Any other assets.
|
// Any other assets.
|
||||||
|
@ -233,7 +241,12 @@ export const createHttpServer = async (flecks) => {
|
||||||
if (req.accepts('text/html')) {
|
if (req.accepts('text/html')) {
|
||||||
res.setHeader('Content-Type', 'text/html; charset=UTF-8');
|
res.setHeader('Content-Type', 'text/html; charset=UTF-8');
|
||||||
const stream = createReadStream(join(FLECKS_CORE_ROOT, 'dist', 'web', 'index.html'));
|
const stream = createReadStream(join(FLECKS_CORE_ROOT, 'dist', 'web', 'index.html'));
|
||||||
deliverHtmlStream(stream, req, res, flecks);
|
try {
|
||||||
|
await deliverHtmlStream(stream, req, res, flecks);
|
||||||
|
}
|
||||||
|
catch (error) {
|
||||||
|
res.status(500).end('Internal error');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
res.status(400).end('Bad Request');
|
res.status(400).end('Bad Request');
|
||||||
|
|
Loading…
Reference in New Issue
Block a user