Последние несколько дней я искал способ исправить проблему с маршрутизацией при использовании статического контента с NestJS и Fastify. В частности, я пытаюсь использовать Angular 8, размещенный на NestJS, с Fastify под капотом. Я следовал примеру, приведенному в руководстве: https://www.djamware.com/post/5d2898430707cc5968d9d57f/build-a-web-app-using-nestjs-fastify-mongodb-and-angular-8
Проблема в том, что если вы попытаетесь перейти непосредственно к определенному URL-адресу, например http://localhost:3000/articles, сервер Fastify отвечает строкой JSON, содержащей сообщение об ошибке 404. Я сузил проблему до чего-то особенно проблемного с Fastify, клонировав репозиторий GitHub из учебника и не делая ничего больше, чем требуется для замены Fastify на Express, что действительно работает.
Я публикую свой код в надежде, что кто-нибудь скажет мне, что я делаю не так. Я бы хотел использовать Fastify вместо Express, потому что, если заявления о скорости верны, я действительно мог бы использовать повышенную производительность. Я оставил закомментированный код, который я использовал для переключения проекта Express. Спасибо всем, кто нашел время, чтобы просмотреть это и даже попытаться помочь.
РЕДАКТИРОВАТЬ: Я только что понял, что забыл предоставить ссылку на репозиторий GitHub, вот она: https://github.com/didinj/nestjs-fastify-mongodb-angular8.git
main.ts
import { NestFactory } from '@nestjs/core';
import { FastifyAdapter, NestFastifyApplication } from '@nestjs/platform-fastify';
import { AppModule } from './app.module';
import { join } from 'path';
async function bootstrap() {
// const app = await NestFactory.create(AppModule);
const app = await NestFactory.create<NestFastifyApplication>(
AppModule,
new FastifyAdapter({
wildcard: false,
logger: {
level: 'trace',
file: '/Users/jcorekin/fastify.log' // Will use pino.destination()
}
}),
);
app.useStaticAssets({
root: join(__dirname, '../client/dist/
});
await app.listen(3000, '0.0.0.0');
}
bootstrap();
app.module.ts
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { ArticleModule } from './article/article.module';
import { ServeStaticModule } from '@nestjs/serve-static';
import { join } from 'path';
@Module({
imports:
[
// ArticleModule,
// ServeStaticModule.forRoot({
// rootPath: join(__dirname, '../client/dist/client'),
// }),
],
// controllers: [AppController],
providers: [AppService],
})
export class AppModule { }
app.service.ts
import { Injectable } from '@nestjs/common';
@Injectable()
export class AppService {
getHello(): string {
return 'Hello World!';
}
}