了解角度前端和 elixir 后端关系

了解角度前端和 elixir 后端关系

我在 openstack 云上运行 kubernetes 集群,我的 angular 前端和 phoenix/elixir 后端各有一个 pod。当用户首次通过暴露 ingress 的节点服务器调用前端时,对后端的 http 调用将在 kubernetes 集群内的服务级别执行并发送给用户。但是,一旦用户在 angular 8 环境中导航,http 调用就会直接转到 kubernetes 服务用于通信的相同 url,因此无法解析地址。那么,为了让用户能够浏览网站,是否绝对有必要将后端 api 端点暴露给互联网?或者有没有办法通过前端入口接入点传输所有内容?

根据要求:

ingress.yaml 是:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: 
    http:  
      paths:
      - path: /api
        backend:
          serviceName: webapp
          servicePort: 8000
      - path: /
        backend:
          serviceName: frontend
          servicePort: 8200

关于 http 调用,auth 服务执行以下操作来登录:

login({ email, password }): Observable<User> {
    const params = {
      data: { attributes: { email: email, password: password } }
    };
    return this.http.post<{ data: User }>('login', params).pipe(
      map(({ data: user }) => {
        this.setTokenInLocalStorage(user, 'user');
        this.store.dispatch(
          this.actions.getCurrentUserSuccess(
            JSON.parse(localStorage.getItem('user'))
          )
        );
        this.store.dispatch(this.actions.loginSuccess());
        return user;
      }),
      tap(
        _ => this.router.navigate(['/']),
        error => this.toastrService.error(error.error.errors.detail, 'ERROR!')
      ),
      catchError(error => {
        return of(error);
      }) as any
    );
  }

相关内容