如何调试或修复 ng serve 出现 400 错误?

How do I debug or fix ng serve giving a 400 error?

我想 运行 我的 Angular 应用程序使用 ng serve 这样我就可以进行一些开发并实时查看结果。

  1. 我运行这个命令:ng serve --ssl --open
  2. 需要几秒钟才能compile/build。
  3. 返回报告:Date: 2020-07-28T14:01:07.382Z - Hash: ******** - Time: 20167ms ** Angular Live Development Server is listening on localhost:4200, open your browser on https://localhost:4200/ ** i 「wdm」: Compiled successfully.
  4. 这会打开 Chrome 到 https://localhost:4200/
  5. 我收到如下所示的错误页面。
  6. 在开发人员工具中,有一个 400 Bad Request 错误响应。我不知道为什么。

我尝试在 ng serve 上使用 --verbose 选项,但我只收到冗长的构建消息 - 与请求本身无关,也没有说明为什么 GET 是错误请求。

我的 Angular 版本是:

Angular CLI: 8.3.29
Node: 10.16.3
OS: win32 x64
Angular: 8.2.14

要使用 ssl 证书为您的应用程序提供服务,您需要生成 ssl 证书。

如果没有 openssl 命令,您可能需要下载它。

在我的示例中,我将自签名证书仅用于 运行 开发环境 (localhost) 中的应用程序。 只需使用命令生成新的自签名证书:

openssl req -new -x509 -newkey rsa:2048 -sha256 -nodes -keyout localhost.key -days 3560 -out localhost.crt

只需回答提示的问题,它将生成两个文件 .crt.key.

在您的 angular 应用程序根文件夹 copy/paste 中生成了两个文件。

之后 运行 命令:

ng serve --ssl --ssl-key certs/localhost.key --ssl-cert certs/localhost.crt 

现在它将在启用 https 的情况下为您的应用程序提供服务。会出现这个警告,可以忽略(开发环境),点击advanced.

之后点击proceed to localhost

这里是通过 https 访问的证据:

不使用 ssl 访问的说明

选项 -ssl 是使用 https 协议为您的应用程序提供服务的参数。正如 angular cli documentation.

所述

为了解决这个问题,您需要从当前的 ng serve 命令调用中删除 -ssl 选项。

调用应该是:

ng serve

之后您应该可以在没有 https 的情况下访问您的应用程序。在你的申请中 url.

只需以隐身模式打开浏览器和一个新标签页(用于清理浏览器缓存)。

http://localhost:4200

请注意,正在使用默认端口 (port 4200)。您必须根据当前配置访问 url。

如@Jess(原发帖人)所述,为确保与您的后端没有通信问题,您必须启用 CORS 策略(在您的后端)到您当前由前端服务的地址(当前为 http:/ /localhost:4200).