Toju Website V2
This commit is contained in:
@@ -1,54 +1,70 @@
|
||||
import { APP_BASE_HREF } from '@angular/common';
|
||||
import { CommonEngine, isMainModule } from '@angular/ssr/node';
|
||||
import express from 'express';
|
||||
import { dirname, join, resolve } from 'node:path';
|
||||
import {
|
||||
dirname,
|
||||
join,
|
||||
resolve
|
||||
} from 'node:path';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
import bootstrap from './main.server';
|
||||
|
||||
const serverDistFolder = dirname(fileURLToPath(import.meta.url));
|
||||
const browserDistFolder = resolve(serverDistFolder, '../browser');
|
||||
const indexHtml = join(serverDistFolder, 'index.server.html');
|
||||
|
||||
const app = express();
|
||||
const commonEngine = new CommonEngine();
|
||||
|
||||
/**
|
||||
* Proxy endpoint for Gitea releases API to avoid CORS issues.
|
||||
*/
|
||||
app.get('/api/releases', async (req, res) => {
|
||||
app.get('/api/releases', async (_request, response) => {
|
||||
try {
|
||||
const response = await fetch('https://git.azaaxin.com/api/v1/repos/myxelium/Toju/releases', {
|
||||
headers: { 'Accept': 'application/json' },
|
||||
const upstreamResponse = await fetch('https://git.azaaxin.com/api/v1/repos/myxelium/Toju/releases', {
|
||||
headers: { Accept: 'application/json' }
|
||||
});
|
||||
if (!response.ok) {
|
||||
res.status(response.status).json({ error: `Upstream returned ${response.status}` });
|
||||
|
||||
if (!upstreamResponse.ok) {
|
||||
response.status(upstreamResponse.status).json({
|
||||
error: `Upstream returned ${upstreamResponse.status}`
|
||||
});
|
||||
|
||||
return;
|
||||
}
|
||||
const data = await response.json();
|
||||
res.setHeader('Cache-Control', 'public, max-age=300'); // cache 5 min
|
||||
res.json(data);
|
||||
} catch (err) {
|
||||
console.error('Proxy fetch error:', err);
|
||||
res.status(502).json({ error: 'Failed to fetch releases from upstream' });
|
||||
|
||||
const data = await upstreamResponse.json();
|
||||
|
||||
response.setHeader('Cache-Control', 'public, max-age=300');
|
||||
response.json(data);
|
||||
} catch (error) {
|
||||
console.error('Proxy fetch error:', error);
|
||||
response.status(502).json({
|
||||
error: 'Failed to fetch releases from upstream'
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Serve static files from /browser
|
||||
* Serve static files from /browser.
|
||||
*/
|
||||
app.get(
|
||||
'**',
|
||||
express.static(browserDistFolder, {
|
||||
maxAge: '1y',
|
||||
index: 'index.html'
|
||||
}),
|
||||
})
|
||||
);
|
||||
|
||||
/**
|
||||
* Handle all other requests by rendering the Angular application.
|
||||
*/
|
||||
app.get('**', (req, res, next) => {
|
||||
const { protocol, originalUrl, baseUrl, headers } = req;
|
||||
app.get('**', (request, response, next) => {
|
||||
const {
|
||||
protocol,
|
||||
originalUrl,
|
||||
baseUrl,
|
||||
headers
|
||||
} = request;
|
||||
|
||||
commonEngine
|
||||
.render({
|
||||
@@ -56,18 +72,18 @@ app.get('**', (req, res, next) => {
|
||||
documentFilePath: indexHtml,
|
||||
url: `${protocol}://${headers.host}${originalUrl}`,
|
||||
publicPath: browserDistFolder,
|
||||
providers: [{ provide: APP_BASE_HREF, useValue: baseUrl }],
|
||||
providers: [{ provide: APP_BASE_HREF, useValue: baseUrl }]
|
||||
})
|
||||
.then((html) => res.send(html))
|
||||
.catch((err) => next(err));
|
||||
.then((html) => response.send(html))
|
||||
.catch((error) => next(error));
|
||||
});
|
||||
|
||||
/**
|
||||
* Start the server if this module is the main entry point.
|
||||
* The server listens on the port defined by the `PORT` environment variable, or defaults to 4000.
|
||||
*/
|
||||
if (isMainModule(import.meta.url)) {
|
||||
const port = process.env['PORT'] || 4000;
|
||||
|
||||
app.listen(port, () => {
|
||||
console.log(`Node Express server listening on http://localhost:${port}`);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user