mirror of
https://github.com/angular/angular-cli.git
synced 2025-05-16 18:43:42 +08:00
68 lines
1.9 KiB
Plaintext
68 lines
1.9 KiB
Plaintext
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 { fileURLToPath } from 'node:url';
|
|
import <% if (isStandalone) { %>bootstrap<% } else { %>AppServerModule<% } %> from './main.server';
|
|
|
|
const serverDistFolder = dirname(fileURLToPath(import.meta.url));
|
|
const browserDistFolder = resolve(serverDistFolder, '../<%= browserDistDirectory %>');
|
|
const indexHtml = join(serverDistFolder, 'index.server.html');
|
|
|
|
const app = express();
|
|
const commonEngine = new CommonEngine();
|
|
|
|
/**
|
|
* Example Express Rest API endpoints can be defined here.
|
|
* Uncomment and define endpoints as necessary.
|
|
*
|
|
* Example:
|
|
* ```ts
|
|
* app.get('/api/**', (req, res) => {
|
|
* // Handle API request
|
|
* });
|
|
* ```
|
|
*/
|
|
|
|
/**
|
|
* Serve static files from /<%= browserDistDirectory %>
|
|
*/
|
|
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;
|
|
|
|
commonEngine
|
|
.render({
|
|
<% if (isStandalone) { %>bootstrap<% } else { %>bootstrap: AppServerModule<% } %>,
|
|
documentFilePath: indexHtml,
|
|
url: `${protocol}://${headers.host}${originalUrl}`,
|
|
publicPath: browserDistFolder,
|
|
providers: [{ provide: APP_BASE_HREF, useValue: baseUrl }],
|
|
})
|
|
.then((html) => res.send(html))
|
|
.catch((err) => next(err));
|
|
});
|
|
|
|
/**
|
|
* 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}`);
|
|
});
|
|
}
|
|
|
|
export default app;
|