javascript - 为什么我的 Angular 前端(带有 AWS 负载均衡器的容器)API 调用没有到达我的 Nodejs 后端(带有 AWS LB 的容器)?
问题描述
我已经测试了这个设置,它可以在本地 100% 端到端地工作,但我无法让它在 AWS 上工作。
前端角度
设置:
- 负载均衡器有一个公共 DNS。
- 端口 80 和 443 上的侦听器。443 具有 SSL 证书。
- 可用区都在我们东部 3 处(公共)
- 安全组允许来自我的 LB 安全组的 HTTP/HTTPS 流量,该安全组允许端口 80/443 上的 0.0.0.0/0 流量。
- 具有正在运行的服务和 1 个任务 (FARGATE) 主机端口 80 的 ECS 集群。
后端节点
设置:
- 负载均衡器有一个公共 DNS。
- 端口 80 和 443 上的侦听器。443 具有 SSL 证书。
- 可用区都在美国东部 3 处(私有)
- 安全组允许来自我的 LB 安全组的 HTTP/HTTPS 流量,该安全组允许端口 80/443 上的 0.0.0.0/0 流量。
- 具有正在运行的服务和 1 个任务 (FARGATE) 主机端口 80 的 ECS 集群。
两者都在同一个 VPC 上。请注意,后端负载均衡器有一个运行状况检查,该检查命中 API 路由 /api/healthcheck 并且它可以工作。
当前访问该站点时,我有一个简单的测试设置,Angular 将运行一个 http 请求来访问 API backendloadbalancer.DNS.com/api/ig。我知道这个调用是由 console.log 触发的。
角代码:
gettest(id): Observable<IG[]> {
console.log('IG HAS BEEN TOUCHED');
const url = hosturl + 'ig';
const httpOptions = {
headers: new HttpHeaders({
'Access-Control-Allow-Origin': '*',
'Content-Type': 'application/json',
'Authorization': ls
}),
withCredentials: true,
params: {
'id': id,
}
};
return this._http.get(url, httpOptions)
.pipe(
map((res) => {
console.log(res);
return <IG[]> res;
})
);
}
后端有一个路由文件,其中包含以下内容:
const express = require('express');
const router = new express.Router();
const ig = require('../controllers/ig.js');
router.get('/ig', console.log('API HIT!'), ig.get);
超时后失败。永远不会看到 API HIT 的任何 console.log。它似乎根本没有击中它。同样,这一切都在本地工作。
解决方案
这是一个有效的处理程序:
router.get('/ig', (req, res, next) => {console.log('API HIT!'); next()}, ig.get);
在您的示例console.log
中,是在服务器启动时调用的,而不是根据请求调用的。我相信它也不适用于 localhost,因为生成的 urlconst url = hosturl + 'ig';
是错误的,或者另一方面它可能已经在 aws 上运行,而你只是没有处理程序,这就是它失败的原因
推荐阅读
- javascript - 为什么它在保存的文件中添加反斜杠?
- android - 如何将 Volley 集成到 MVVM 模式中以定期将我的远程数据库与我的本地数据库同步
- javascript - 多次单击按钮时如何重复该按钮?
- python - Itertools 的问题 - 下一个函数(初级 Python 用户)
- php - PHPMailer不发送任何电子邮件
- load-testing - JMeter:运行“许多”线程时出现 javax.net.ssl.SSLException
- javascript - 禁止命令不会让我禁止其他人
- r - 带有 knitr::include_graphics 的图形大小的块选项被忽略
- json - 通过powershell更新sendgrid个性化json文件
- python - groupby 后的百分比基于 0 或 1