【发布时间】:2018-09-27 11:45:05
【问题描述】:
在我的 Angular 应用程序中,如果我加载主页 /,然后导航到 /products,它可以正常工作(它是一个延迟加载的模块)。但是如果现在我重新加载页面,浏览器会向服务器发出 GET /products 调用,这会导致 404。
解决方案是发送index.html,然后 Angular 应用程序恢复正常。所以在 Express 中,我使用 app.all("*", (req,res) => { res.sendFile("index.html") }) 并且它有效。
如何在 Nest 中做同样的事情?
有一个@All 装饰器,但是给定组件中的每个控制器都处理一个子路由,例如@Controller("cats") 将匹配/cats 路由,所以如果我在这个控制器中添加@All,它将只匹配@ 987654331@,不是*。
我真的必须为此创建一个带有控制器的完整独立模块吗?我就是这么做的
@Controller() // Matches "/"
export class GenericController {
@All() // Matches "*" on all methods GET, POST...
genericFunction(){
console.log("Generic route reached")
}
}
在我的主模块中:
@Module({
imports: [
ItemsModule, // Other routes like /items
GenericModule, // Generic "*" route last
],
})
它有效,但它似乎有点矫枉过正。这是要走的路还是有更简单的技巧?
【问题讨论】:
-
这里很好的样板:github.com/Innovic-io/angular-nestjs-rendering 你也可以使用
angular-cli。由于它使用了angular-cli,前端应用程序使用单独的express实例,并且它已经配置为处理未找到的请求... -
哦,我一直在使用 Angular CLI。但是
front app use separate express instance是什么意思? Express 是服务器端的 -
我的意思是
angular-cli使用单独的 express 实例 -
但那是
ng serve,不是吗?它是 CLI 的内置服务器。我没有使用ng serve,我正在构建自己的服务器。无论如何,你的答案奏效了。谢谢! -
是的,你是对的。它是本地调试应用程序时使用的 CLI 的内置服务器。在生产过程中,您当然需要自己的服务器,在您的情况下使用
NestJS✌