首页 > 解决方案 > 为什么我的 Angular 前端(带有 AWS 负载均衡器的容器)API 调用没有到达我的 Nodejs 后端(带有 AWS LB 的容器)?

问题描述

我已经测试了这个设置,它可以在本地 100% 端到端地工作,但我无法让它在 AWS 上工作。

前端角度

设置:

后端节点

设置:

两者都在同一个 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。它似乎根本没有击中它。同样,这一切都在本地工作。

标签: javascriptnode.jsangularamazon-web-services

解决方案


这是一个有效的处理程序:

 router.get('/ig', (req, res, next) => {console.log('API HIT!'); next()},  ig.get);

在您的示例console.log中,是在服务器启动时调用的,而不是根据请求调用的。我相信它也不适用于 localhost,因为生成的 urlconst url = hosturl + 'ig';是错误的,或者另一方面它可能已经在 aws 上运行,而你只是没有处理程序,这就是它失败的原因


推荐阅读