Angular httpclient CORS请求返回404错误

时间:2019-08-05 06:39:56

标签: node.js angular typescript cors

我启动了一个在127.0.0.1:4200(PC A)上运行的示例Angular应用程序,在同一台计算机上启动了Web浏览器,并且一切正常。

在应用程序中,有一个heroService.ts调用this.http.get等以从127.0.0.1:4200获取数据。

然后,我使用nodejs express启动了另一个http服务器,该服务器提供了一些API服务,IP为192.168.2.101:3000(PC B)。 api非常好,因为我可以在任何Web浏览器中运行它并查看结果(全部在json中)。在nodejs express中,我也安装了cors并使用app.use(cors())来启用CORS支持。

以下是问题所在。

我在PC A中关注了heroService.ts,并创建了apiService.ts,并使用this.http.get("http://192.168.2.101:3000").subscribe(_=>console.log("ok"));在PC B上调用了API(PC B应该已经启用了cors)。

但是,似乎在浏览器上运行的Angular无法识别此地址,并且在浏览器的调试窗口中,我看到404错误,找不到http://192.168.2.101:3000。请注意,相同的网址http://192.168.2.101:3000可以直接在Web浏览器中正常运行。

奇怪的是,在浏览器的(chrome和edge)网络调试窗口中,我看不到任何请求正在发送,没有这样的请求发送到服务器。在nodejs的服务器端,我尝试记录所有连接,但也看不到任何连接。在我看来,Web浏览器没有发送此http get命令,而角度库直接返回了404。

我试图搜索相同的错误,但是找不到有用的东西。

我猜想Angular的库将继续使用基本URL(127.0.0.1:4200),并且不会解析http://192.168.2.101:3000吗?有办法解决吗?

我希望我能清楚地解释问题。

感谢帮助。

1 个答案:

答案 0 :(得分:1)

我认为您遇到了与此类似的错误。

从原点“ http://localhost:1337/api/Jobs/addjob”到“ http://localhost:3000”的XMLHttpRequest的访问已被CORS策略阻止:对预检请求的响应未通过访问控制检查:“访问控制-Allow-Origin'标头包含无效值”。

因此,您应该启用跨源资源共享(也称为CORS)。为此,我们需要在响应中设置正确的标头,以使浏览器可以使用任何域中的数据。

要使用Angular等框架将数据加载到客户端代码(前端),请在服务器端(后端)使用express(Node.js)中的中间件功能,然后再定义路由。 / p>

app.use(function(req, res, next) { res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); next(); });

下面的链接将有助于获得有关“启用CORS express.js(node.js)”的更多知识。 https://jonathanmh.com/how-to-enable-cors-in-express-js-node-js/