У меня есть API-интерфейс NestJS, который я хочу использовать для обслуживания внешнего интерфейса Angular.Это развернуто на героку.Для внутренних маршрутов используйте префикс «/ api», и я хочу, чтобы все другие запросы отвечали index.html из моего приложения Angular сборки.
Моя структура папок для развернутого приложения:
-dist
-client
-index.html
-.js files
-server
-main.js
-other dirs/modules
Я пробовал все до сих пор, и все они работали локально.Проблема развертывания к героку.Самое близкое, что я получил (с помощью этой статьи: https://medium.com/@bo.vandersteene/use-nest-as-your-server-side-application-with-an-angular-frontend-540b0365bfa3) создает промежуточное программное обеспечение внешнего интерфейса в приложении NestJS, которое просматривает путь запроса и расширения файлов, а затем использует res.sendFile и path.resolve для созданияfilepath для ответа.
import { Injectable, NestMiddleware } from '@nestjs/common';
import { apiPrefix } from '../../config';
import { Request, Response } from 'express';
import { resolve } from 'path';
const allowedExtentions = [
'.js',
'.ico',
'.css',
'.png',
'.jpg',
'.woff2',
'.woff',
'.ttf',
'.svg',
];
const prefix = apiPrefix;
@Injectable()
export class FrontendMiddleware implements NestMiddleware {
use(req: Request, res: Response, next: () => void) {
const { baseUrl } = req;
if (baseUrl.indexOf(prefix) === 0) {
next();
} else if (
allowedExtentions.filter(extention => baseUrl.indexOf(extention) > 0)
.length > 0
) {
res.sendFile(resolve(`./dist/client/${baseUrl}`));
} else {
res.sendFile(resolve('./dist/client/index.html'));
}
}
}
Это работает ЛОКАЛЬНО. При развертывании на heroku я получаю сообщение об ошибке: [ExceptionsHandler] ENOENT: no such file or directory, stat '/app/dist/client/index.html'
Однако это не имеет смысла, поскольку при входе в систему Heroku bash для моего проектаЯ могу видеть точный путь к файлу и файл. Файл существует, но по какой-то причине NestJS не распознает его.
Любая помощь приветствуется.