如何将所有路由重定向到nest.js中的index.html(角)?

我正在制作Angular + NestJS应用,我想发送index.html所有路线的文件。

async function bootstrap() {

const app = await NestFactory.create(AppModule);

app.useStaticAssets(join(__dirname, '..', 'frontend', 'dist', 'my-app'));

app.setBaseViewsDir(join(__dirname, '..', 'frontend', 'dist', 'my-app'));

await app.listen(port);

}

@Controller('*')

export class AppController {

@Get()

@Render('index.html')

root() {

return {};

}

}

打开时它工作正常localhost:3000/,但是如果打开localhost:3000/some_route,服务器随即500 internal

error提示Can not find html module。我一直在搜寻为什么我会收到此错误,而所有人都说set default view

engine like ejs or

pug,但是我不想使用某些引擎,我只想发送由angular构建的纯html,而不会像hack一样res.sendFile('path_to_file')。请帮忙

回答:

您只能使用setBaseViewsDir@Render()与像车把(HBS)视图引擎;

用于提供静态文件(角度),但是,您只能使用useStaticAssetsresponse.sendFile

要使用index.html其他所有路线,您有两种可能:

回答:

您可以创建执行重定向的中间件,请参阅本文:

@Middleware()

export class FrontendMiddleware implements NestMiddleware {

resolve(...args: any[]): ExpressMiddleware {

return (req, res, next) => {

res.sendFile(path.resolve('../frontend/dist/my-app/index.html')));

};

}

}

然后为所有路由注册中间件:

export class ApplicationModule implements NestModule {

configure(consumer: MiddlewaresConsumer): void {

consumer.apply(FrontendMiddleware).forRoutes(

{

path: '/**', // For all routes

method: RequestMethod.ALL, // For all methods

},

);

}

}

回答:

您可以将所有重定向NotFoundExceptionsindex.html

@Catch(NotFoundException)

export class NotFoundExceptionFilter implements ExceptionFilter {

catch(exception: HttpException, host: ArgumentsHost) {

const ctx = host.switchToHttp();

const response = ctx.getResponse();

response.sendFile(path.resolve('../frontend/dist/my-app/index.html')));

}

}

然后在您的中将其注册为全局过滤器main.ts

app.useGlobalFilters(new NotFoundExceptionFilter());

以上是 如何将所有路由重定向到nest.js中的index.html(角)? 的全部内容, 来源链接: utcz.com/qa/420533.html

回到顶部