Javascript - Astro - Express Middleware

Configuración Astro

Espeficicar que se usará el adaptador node en modo middleware


// Importar node
import node from '@astrojs/node';

// Añadir la configuracion "adapter"
export default defineConfig({
  adapter: node({
    mode: 'middleware',
  }),
});

Aplicación Express

Crearemos un fichero para ejecutar el servidor express-server.mjs

// express-server.mjs
import express from 'express';
import { handler as ssrHandler } from './dist/server/entry.mjs';

const app = express();
const base = '/'
app.use(base, express.static('dist/client/'));
app.use(ssrHandler);

app.listen(8080);

Aplicación Express multihilo

Podemos utilizar cluster para crear multiples hilos de una misma aplicacción.

// express-server-cluster.mjs
import cluster from 'node:cluster';
import express from 'express';
import { handler as ssrHandler } from './dist/server/entry.mjs';

const listenPort = process.env.SERVER_LISTEN_PORT ?? 4321;
const numCPUs = process.env.NUM_WORKERS ?? 1;

if (cluster.isPrimary) {
    console.log(`Hilo principal PID=${process.pid} iniciado`);

    for (let i = 0; i < numCPUs; i++) {
        cluster.fork();
    }

    cluster.on('exit', (worker, code, signal) => {
        console.log(`Hilo PID=${worker.process.pid} terminado`);
    });

} else {
    const base = '/'
    const app = express();

    app.use(base, express.static('dist/client/'));
    app.use(ssrHandler);

    const server = app.listen(listenPort, () => {
        console.log(`Hilo PID=${process.pid} PUERTO=${listenPort}`);
    });
}

Iniciar el servidor

# Único hilo
node express-server.mjs

# Múltiples hilos
node express-server-cluster.mjs