Estaba tratando de alojar mi servicio de descanso expreso con una aplicación angular2 en el mismo servidor. Después de leer varias publicaciones relacionadas, encontré varias soluciones que funcionaron en el servidor local http://localhost:3000 pero cuando alojé mi aplicación en Heroku e intento acceder a mi ruta rápida que comienza con /api/... todo funcionó bien. pero no pudo acceder a la página de interfaz de usuario de angular2, comenzó a mostrar un mensaje No encontrado en la página.
app.all('*', (req, res) => { console.log(`[TRACE] Server 404 request: ${req.originalUrl}`); res.sendFile(path.join(__dirname, 'dist/index.html')); });
o
app.use(function(req, res, next) { res.sendFile(path.join(__dirname, 'dist/index.html')); });
o
app.get('/*', function (req, res) { res.sendFile(path.join(__dirname, 'dist/index.html')); });
o
app.get(/^\/([^a]|a[^p]|ap[^i]|api[^/]).*$/,(req,res) => { res.sendFile(path.join(__dirname, 'dist/index.html')); });
Cuando implementé mi aplicación en el servidor de alojamiento, descubrí que el directorio dist no se implementa en un servidor que contiene la compilación de la aplicación Angular que se crea después de ejecutar ng build --prod .
En primer lugar, lo cargué manualmente en el servidor de alojamiento y mi aplicación comenzó a funcionar correctamente. Luego me vino a la mente que sería una tarea manual cada vez, así que encontré dos soluciones para este problema.
En segundo lugar, leí la documentación de package.json desde este enlace https://docs.npmjs.com/misc/scripts y me familiaricé con los scripts de preinstalación y postinstalación y actualicé mi archivo package.json para tener los siguientes scripts.
"scripts": { "ng": "ng", "start": "node index.js", "build": "ng build", "test": "ng test", "lint": "ng lint", "e2e": "ng e2e", "postinstall": "ng build --prod" },
lea este artículo para la implementación en heroku https://paucls.wordpress.com/2016/11/25/deploy-angular-2-cli-app-to-heroku/