【问题标题】:Cloud9 Angular & NodeJS unable to access API running on different port of same machineCloud9 Angular 和 NodeJS 无法访问在同一台机器的不同端口上运行的 API
【发布时间】:2020-06-22 12:06:37
【问题描述】:

我正在为我的项目使用 AWS cloud9 IDE。

我的 Angular 在端口 8080 上运行。我的 NodeJS (+Express) 服务器在端口 8081 上运行。

我在 Node app.js 中设置了 CORS 标头,如下所示:

const app = express();
app.use(express.json());
app.use((req, res, next) => {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Methods", "GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    next();
});

我使用带有 http 客户端模块的 Angular 服务向 api 端点 (https://localhost:8081/blogposts/*) 发出请求。

在我的一个 Angular 组件中,我请求获取 ngOnInit() 中的数据:

ngOnInit() {
    this.blogService.getBlogPosts()
        .subscribe((blogposts: BlogPost[]) => {
            this.blogposts = blogposts;
        });
}

但我在浏览器控制台中收到以下错误:

GET https://localhost:8081/blogposts net::ERR_CONNECTION_REFUSED

我认为这是设置 CORS 标头的问题,但如上所示,我已添加所有必需的标头。

我读到代理可以用作 CORS 的替代解决方案,但这不适合生产环境。

我可以使用 curl 确认我的 API 工作正常:

ubuntu:~/environment (develop) $ curl http://localhost:8081/blogposts

[{"title":"Calvin and Hobbes","authorName":"Bill Waterson", ...

我也担心 Cloud9 环境是否阻止我进行这些 API 调用,但据我所知,8080 和 8081 端口都可以安全使用。

我能否获得更多帮助来找出我的 api 出了什么问题?

【问题讨论】:

  • 你可以通过浏览器或邮递员访问https://localhost:8081/blogposts
  • 删除https并替换为http
  • @Dilshan 是的,我尝试使用 curl 向 API 发出请求,它可以工作。我已经添加了上面的结果。
  • @Dilshan 不,用 http 替换 https 给了我同样的错误。但是curl命令对https根本不起作用,所以我认为使用http确实是正确的。

标签: node.js angular express cloud9-ide aws-cloud9


【解决方案1】:

Cloud9 不允许 http/https 连接到除 8080 之外的任何端口。团队意识到这会给开发人员带来摩擦,他们正在寻找改进方法。

【讨论】:

  • 感谢您的澄清。我意识到了这一点,并将我的工作站移到了 Windows + WSL + docker 上。
猜你喜欢
  • 2017-01-07
  • 1970-01-01
  • 2022-01-02
  • 2018-12-29
  • 2018-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-09
相关资源
最近更新 更多