如何将所有路由重定向到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)视图引擎;
用于提供静态文件(角度),但是,您只能使用useStaticAssets
和response.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
},
);
}
}
回答:
您可以将所有重定向NotFoundExceptions
到index.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