提问者:小点点

无法从angular调用节点服务


我正在学习从angular调用node,在我的组件中我有以下代码

import { Component, OnInit } from '@angular/core';
import {GetvalidationService} from '../_services/getvalidation.service';
@Component({
  selector: 'app-content',
  templateUrl: './content.component.html',
  styleUrls: ['./content.component.css']
})
export class ContentComponent implements OnInit {

  constructor(private service:GetvalidationService) { }

  ngOnInit(): void {
    this.getStudentData();
  }
  studentDetails :any =[]  
  getStudentData(){
        this.service.getStudentData().subscribe()
  }

}

服务定义如下

import { Injectable } from '@angular/core';
import {HttpClient} from '@angular/common/http';
@Injectable({
  providedIn: 'root'
})
export class GetvalidationService {

  constructor(private http:HttpClient) { }

  authenticateLogin(userDetails){
   
    return this.http.post("/api/login",userDetails)
  }

  getStudentData(){
    return this.http.get("/api/student");
  }
}

我还在package.json中设置了proxy.conf.json

我的proxy.conf.json看起来像

{
    "/api/*":{
        "target":"http://localhost:3000",
        "secure": false,
        "changeOrigin": true,
        "pathrewrite":{"^/api":""}
    }
}

尽管如此,当我调用student时,angular服务调用http://localhost:4200/api/student,而不是端口3000上的node服务,哪里会出错呢?我使用npm run start来启动angular应用程序


共1个答案

匿名用户

您必须定义您的baseUrl,如果您不这样做,那么您将使用您在角度端口选项中定义的baseUrl,即localhost:4200。

因此连接到节点所需的代码如下:

我建议将api url保留在environment中,这样您就可以轻松地在不同的环境中移动它,如下所示:

export const environment = {
  production: false,
  api: 'http://localhost:3000'
};

然后,您的服务ts文件将包括来自环境的API:

import { Injectable } from '@angular/core';
import {HttpClient} from '@angular/common/http';
@Injectable({
  providedIn: 'root'
})
export class GetvalidationService {


private baseUrl= environment.api + '/api';  // URL to your web api


  constructor(private http:HttpClient) { }

  authenticateLogin(userDetails){
   
    return this.http.post(`${this.baseUrl}/login`,userDetails)
  }

  getStudentData(){
    return this.http.get(`${this.baseUrl}/student`);
  }
}