在Visual Studio中运行Angular 9 Web项目出现SpaServices报错
信息: Microsoft.Hosting.Lifetime[0]
正在监听: https://localhost:5001
信息: Microsoft.Hosting.Lifetime[0]
正在监听: http://localhost:5000
信息: Microsoft.Hosting.Lifetime[0]
应用已启动,按Ctrl+C关闭
信息: Microsoft.Hosting.Lifetime[0]
托管环境: 开发环境
信息: Microsoft.Hosting.Lifetime[0]
内容根路径: C:\Users\CF135238\source\repos\COT.DEV.Forf\Forf
失败: Microsoft.AspNetCore.SpaServices[0]
(node:7664) [DEP0111] 弃用告警: 对 process.binding('http_parser') 的调用已被废弃
失败: Microsoft.AspNetCore.SpaServices[0]
(执行node --trace-deprecation ...可查看告警触发的代码位置)
问题根因
你看到的两条fail等级日志本质是Node版本和Angular构建工具的兼容性告警,只是ASP.NET Core的Spa服务中间件默认把Node输出的所有stderr内容都标记为失败等级,并不代表程序真的运行出错。页面空白的核心原因是.NET后端和Angular前端服务的代理配置不匹配。
解决方案
1. 修复页面空白问题
- 打开项目根目录的
package.json,查看scripts下的start命令,确认Angular dev server的启动端口,默认配置下ng serve使用4200端口 - 打开.NET项目的配置文件:
- 若为.NET 5及更早版本,检查
Startup.cs里ConfigureServices方法中的Spa配置,确认UseAngularCliServer的端口和上述Angular启动端口一致 - 若为.NET 6及以上版本,检查
Program.cs中的Spa相关配置,确认代理指向的前端端口正确
- 若为.NET 5及更早版本,检查
- 检查项目根目录下的
proxy.conf.js,确认后端API代理规则没有拦截前端静态资源请求
2. 消除DEP0111弃用告警
该告警是Node 16+版本废弃了process.binding('http_parser')接口,而旧版本的Angular构建依赖仍在调用该接口导致,两种修复方案二选一:
- 方案一:将本地Node版本降级到14.x LTS版本,该版本尚未废弃对应接口,告警会直接消失
- 方案二:升级项目的Angular构建依赖到12.x及以上版本,执行以下命令即可:
npm update @angular/cli @angular-devkit/build-angular
3. 验证启动效果
配置修改完成后重新在VS中启动项目,如果依旧无法加载页面,可以直接访问Angular dev server的端口(默认4200)排查是否是前端服务本身启动失败,如果该端口可正常访问,只需调整.NET的Spa代理配置即可。
内容的提问来源于stack exchange,提问作者Tdigges

