我是Angular2的新手,并且非常擅长将它整合到ASP.NET Web应用程序中。 当我尝试在Angular2 ASP.NET Web应用程序中构建调试模式时出现此错误。在发布模式下构建时出现了同样的错误。
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[0]
An unhandled exception has occurred while executing the request
Microsoft.AspNetCore.NodeServices.HostingModels.NodeInvocationException: Prerendering failed because of error: ReferenceError: window is not defined
at D:\Projects\BryterOpsAdmin\BryterOpsAdmin\ClientApp\dist\vendor.js:89981:21
at Object.<anonymous> (D:\Projects\BryterOpsAdmin\BryterOpsAdmin\ClientApp\dist\vendor.js:90732:3)
at Object.<anonymous> (D:\Projects\BryterOpsAdmin\BryterOpsAdmin\ClientApp\dist\vendor.js:90734:30)
at __webpack_require__ (D:\Projects\BryterOpsAdmin\BryterOpsAdmin\ClientApp\dist\vendor.js:21:30)
at Object.<anonymous> (D:\Projects\BryterOpsAdmin\BryterOpsAdmin\ClientApp\dist\vendor.js:85385:1)
at Object.<anonymous> (D:\Projects\BryterOpsAdmin\BryterOpsAdmin\ClientApp\dist\vendor.js:85386:30)
at __webpack_require__ (D:\Projects\BryterOpsAdmin\BryterOpsAdmin\ClientApp\dist\vendor.js:21:30)
at Object.<anonymous> (D:\Projects\BryterOpsAdmin\BryterOpsAdmin\ClientApp\dist\main-server.js:20466:42)
at __webpack_require__ (D:\Projects\BryterOpsAdmin\BryterOpsAdmin\ClientApp\dist\main-server.js:20:30)
at Object.exports.REPLACEMENT_CHARACTER (D:\Projects\BryterOpsAdmin\BryterOpsAdmin\ClientApp\dist\main-server.js:398:79)
Current directory is: D:\Projects\BryterOpsAdmin\BryterOpsAdmin
我刚刚对mvc方面的模型类进行了一些无关紧要的更改,所以当我收到此错误时,我还原了我的更改并再次尝试。 我仍然收到这个错误。根据我的源代码控制,自上次正常工作以来,一直没有任何变化。 可能导致此错误的原因是什么?我完全不知道甚至要去寻找什么。
我搜索了StackOverflow有关的任何内容,但除了这个问题之外我没有找到任何适用于asp.net的内容:Prerendering failed because of error: ReferenceError: window is not defined 从来没有回答。
我尝试删除隐藏的obj和bin文件夹无效。
提前谢谢。
更新: 我尝试直接导航到我网站上的一个页面,它已成功完成。似乎Angular2不再自动路由。我仍然通过MVC('Home / Index')访问Home Controller和Home Index.cshtml视图,所以这看起来像是一个Angular2问题。
这就是我的angular2路由的样子。
`
RouterModule.forRoot([
{ path: '', redirectTo: 'home', pathMatch: 'full' },
{ path: 'home', component: HomeComponent },
{ path: 'counter', component: CounterComponent },
{ path: 'fetch-data', component: FetchDataComponent },
{ path: 'bryterUsers', component: BryterUsersComponent },
{ path: 'adminUsers', component: AdminUsersComponent },
{ path: 'retailers', component: RetailersComponent },
{ path: 'providers', component: ProvidersComponent },
{ path: '**', redirectTo: 'home' }
])`
UPDATE2:我现在无法再导航到任何其他页面了。无论我走到哪里,我都会得到'窗口未定义'错误。我的代码中没有更改任何内容。我完全难过了。任何帮助将不胜感激。
答案 0 :(得分:3)
我在这里找到了答案,虽然我不知道答案是否正确:
Prerendering failed because of error: ReferenceError: Event is not defined with PrimeNG AutoComplete
以下是他们的所作所为:
“我能够通过更改ASP.Net核心模板生成的Index.cshtml页面中的asp-prerender标记来解决这个问题。我从我的问题中忽略了关于ASP.Net核心模板的观点。
我从
更改了标签 <app asp-prerender-module="ClientApp/dist/main-server">Loading...</app>
到
<app asp-ng2-prerender-module="ClientApp/dist/main-server">Loading...</app>
“
这解决了我的问题,但我不知道这是否是最佳做法。
答案 1 :(得分:2)
当您向app.module.shared.ts
添加依赖于window
变量的内容时,会导致此错误,该变量仅在浏览器中不在服务器上可用。很难弄清楚Hit n Trial是什么引起了这个问题但是现在唯一的解决方案。
找到那件事并将其移至app.module.browser.ts
。
@techgeekster的解决方案可行,但我会禁用服务器端渲染。
参考:GitHub Issue
答案 2 :(得分:0)
就我而言,它是在服务器端预渲染时使用window.location.origin
。
查找window.location.origin
的任何用法并检查它是否仅用于客户端