我正在制作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());
我有一个Quarkus应用程序,它都包了一个角水疗(捆绑在罐子里)。Quarkus提供后端API路由供前端使用。在构建Quarkus应用程序时,将Angular应用程序构建复制到目标中的路径。 我没有使用JAX-RS来注册路由。相反,我直接在Vertx路由器上的方法中以编程方式注册它们。 我希望任何不被识别的路由(无论是作为Vertx注册的路由还是静态资源)被重新定向到,以便我的Angular应用
问题内容: 我一直在使用Web API在ASP.NET MVC内从事 AngularJS 项目。它非常有用,除非您尝试直接转到有角度的路由URL或刷新页面。我认为可以使用 MVC的路由引擎 来处理服务器配置,而不是胡闹。 当前的WebAPIConfig: 当前的RouteConfig: 当前的Global.asax.cs: 目标: / api / *继续转到WebAPI,/ partials /
(以防你看过我的上一个问题:不要混淆问题的第一部分/引言是相同的。最后的问题是不同的:) 我正在使用Symfony 2.8开发一个WebApp项目。我想在页面中添加不同的语言。根据用户的区域设置,所有路由/url应从更改为/locale/some/url
问题内容: 我正在为基于React的单页应用程序开发spring后端,在其中我使用React-Router进行客户端路由。 在index.html页面旁边,后端在路径上提供数据。 为了在我的应用程序的根路径上提供index.html,我添加了一个资源处理程序 我想要的是在没有其他路由匹配时(例如,当我调用以外的路径时)提供index.html页。 在spring如何配置这种全包式路线? 问题答案:
我正在使用S3托管一个javascript应用程序,该应用程序将使用HTML5 pushStates。问题是,如果用户为任何URL添加书签,它将无法解析为任何内容。我需要的是接收所有url请求并在S3桶中提供根index.html的能力,而不是仅仅进行完全重定向。那么我的javascript应用程序就可以解析URL并提供适当的页面。 有没有办法告诉S3为所有URL请求提供index.html服务,