Angular: come risolvere l'errore “Failed to load resource: net::ERR_CONNECTION_REFUSED”

di il
18 risposte

Angular: come risolvere l'errore “Failed to load resource: net::ERR_CONNECTION_REFUSED”

Sono un principiante in Angular, non sto capendo come risolvere questo errore (immagine sotto).



Questo è il codice di interesse:

Controller.java
package Controller;  
  
import java.util.List;  
import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.web.bind.annotation.CrossOrigin;  
import org.springframework.web.bind.annotation.DeleteMapping;  
import org.springframework.web.bind.annotation.GetMapping;  
import org.springframework.web.bind.annotation.PathVariable;  
import org.springframework.web.bind.annotation.PostMapping;  
import org.springframework.web.bind.annotation.RequestBody;  
import org.springframework.web.bind.annotation.RequestMapping;  
import org.springframework.web.bind.annotation.RestController;  
  
import Model.Student;  
import Service.Student_Service;  
  
@RestController  
@CrossOrigin(origins="http://localhost:4200")  
@RequestMapping(value="/api")  
public class Controller {  
      
    @Autowired  
    private Student_Service studentservice;  
      
    @PostMapping("save-student")  
    public boolean saveStudent(@RequestBody Student student) {  
         return studentservice.saveStudent(student);  
          
    }  
      
    @GetMapping("students-list")  
    public List<Student> allstudents() {  
         return studentservice.getStudents();  
          
    }  
Student_DAO_Imp.java (qui l'implementazione del metodo getstudents)
package DAO;  
  
import java.util.List;  
  
  
import org.hibernate.Session;  
import org.hibernate.SessionFactory;  
import org.hibernate.query.Query;  
import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.stereotype.Repository;  
  
  
import Model.Student;  
  
@Repository  
public class Student_DAO_Imp  implements Student_DAO{  
  
    @Autowired  
    private SessionFactory sessionFactory;  
      
    @Override  
    public List<Student> getStudents() {  
        Session currentSession = sessionFactory.getCurrentSession();  
        Query<Student> query=currentSession.createQuery("from Student", Student.class);  
        List<Student> list=query.getResultList();  
        return list;  
    }  
  
  }

student.service.ts
import { Injectable } from '@angular/core';  
    import { HttpClient } from '@angular/common/http';  
    import { Observable } from 'rxjs';  
      
    @Injectable({  
      providedIn: 'root'  
    })  
      
    export class StudentService {  
      
      private baseUrl = 'http://localhost:8080/api/';  
      
      constructor(private http:HttpClient) { }  
      
      getStudentList(): Observable<any> {  
        return this.http.get(`${this.baseUrl}`+'students-list');  
      }            
      
      getStudent(id: number): Observable<Object> {  
        return this.http.get(`${this.baseUrl}/student/${id}`);  
      }  
      
        
    }  
Grazie ragazzi...

18 Risposte

  • Re: Angular: come risolvere l'errore “Failed to load resource: net::ERR_CONNECTION_REFUSED”

    jad(v)a ha scritto:


    Sono un principiante in Angular, non sto capendo come risolvere questo errore (immagine sotto).
    Il problema è l'url, non tanto Angular in sè.
    C'è però una cosa che dovresti precisare: stai usando Spring Boot ... oppure Spring Framework puro? (dal solo codice postato non è evidente)

    Se usi Spring Boot è tipico (ed è già così per default) che si possa avere un url del tipo:
    http://localhost:8080/api/students-list

    Se usi Spring Framework da solo, stai facendo una web application classica, che genera un WAR da deployare su un servlet container (es. Tomcat, ecc..). In una situazione di questo tipo, a meno che imposti tu diversamente il progetto, l'applicazione ha una sua context-root (il nome del contesto) per cui l'url risulterebbe tipo:
    http://localhost:8080/nomecontesto/api/students-list

    Queste cose però dovresti già saperle o comunque averle verificate prima di arrivare a quell'errore ...


    Ah, altra cosa: ho notato ora che hai messo @CrossOrigin(origins="http://localhost:4200")
    C'è un motivo preciso? Cioè stai usando il ng serve di Angular che per default è proprio sulla porta 4200? Se sì, ok.
  • Re: Angular: come risolvere l'errore “Failed to load resource: net::ERR_CONNECTION_REFUSED”

    Credevo che fosse un problema di Angular visto che non ho mai riscontrato sinora un errore del genere.
    Sto usando SpringBoot e ng serve.
    Quindi qual'è il consiglio che mi dai per risolvere questo errore?
    Grazie di cuore.

    andbin ha scritto:


    jad(v)a ha scritto:


    Sono un principiante in Angular, non sto capendo come risolvere questo errore (immagine sotto).
    Il problema è l'url, non tanto Angular in sè.
    C'è però una cosa che dovresti precisare: stai usando Spring Boot ... oppure Spring Framework puro? (dal solo codice postato non è evidente)

    Se usi Spring Boot è tipico (ed è già così per default) che si possa avere un url del tipo:
    http://localhost:8080/api/students-lis

    Se usi Spring Framework da solo, stai facendo una web application classica, che genera un WAR da deployare su un servlet container (es. Tomcat, ecc..). In una situazione di questo tipo, a meno che imposti tu diversamente il progetto, l'applicazione ha una sua context-root (il nome del contesto) per cui l'url risulterebbe tipo:
    http://localhost:8080nomecontesto/api/students-list

    Queste cose però dovresti già saperle o comunque averle verificate prima di arrivare a quell'errore ...


    Ah, altra cosa: ho notato ora che hai messo @CrossOrigin(origins="http://localhost:420")
    C'è un motivo preciso? Cioè stai usando il ng serve di Angular che per default è proprio sulla porta 4200? Se sì, ok.
  • Re: Angular: come risolvere l'errore “Failed to load resource: net::ERR_CONNECTION_REFUSED”

    jad(v)a ha scritto:


    Sto usando SpringBoot e ng serve.
    Quindi qual'è il consiglio che mi dai per risolvere questo errore?
    Innanzitutto verifica "a mano" con un altro strumento (es. Postman, curl, httpie, ecc...) che quel endpoint risponda correttamente e con quali header in response. Questa in generale è una prova che andrebbe sempre fatta, indipendentemente da chi sia il client.
  • Re: Angular: come risolvere l'errore “Failed to load resource: net::ERR_CONNECTION_REFUSED”

    andbin ha scritto:


    jad(v)a ha scritto:


    Sto usando SpringBoot e ng serve.
    Quindi qual'è il consiglio che mi dai per risolvere questo errore?
    Innanzitutto verifica con un altro strumento (es. Postman, curl, httpie, ecc...) che quel endpoint risponda correttamente e con quali header in response. Questo in generale andrebbe sempre fatto, indipendentemente da chi sia il client.

    andbin ha scritto:


    jad(v)a ha scritto:


    Sto usando SpringBoot e ng serve.
    Quindi qual'è il consiglio che mi dai per risolvere questo errore?
    Innanzitutto verifica con un altro strumento (es. Postman, curl, httpie, ecc...) che quel endpoint risponda correttamente e con quali header in response. Questo in generale andrebbe sempre fatto, indipendentemente da chi sia il client.
    Mi hanno consigliato di usare visual studio code. Non ho idea di come usare questi altri strumenti.
  • Re: Angular: come risolvere l'errore “Failed to load resource: net::ERR_CONNECTION_REFUSED”

    jad(v)a ha scritto:


    Mi hanno consigliato di usare visual studio code. Non ho idea di come usare questi altri strumenti.
    Indipendentemente dal front-end Angular, devi poter verificare che il back-end risponda correttamente. Poi con quale strumento lo fai, browser (limitatamente), Postman, curl, HTTPie, soapUI, ecc... importa relativamente. Chi sviluppa sul back-end usa sempre almeno uno di questi strumenti.
  • Re: Angular: come risolvere l'errore “Failed to load resource: net::ERR_CONNECTION_REFUSED”

    Ok, però visto che non ho mai fatto una cosa del genere, come posso proseguire? Esiste qualche guida per fare questo? Io sono studente, quindi non conosco ancora questo.

    andbin ha scritto:


    jad(v)a ha scritto:


    Mi hanno consigliato di usare visual studio code. Non ho idea di come usare questi altri strumenti.
    Indipendentemente dal front-end Angular, devi poter verificare che il back-end risponda correttamente. Poi con quale strumento lo fai, browser (limitatamente), Postman, curl, HTTPie, soapUI, ecc... importa relativamente. Chi sviluppa sul back-end usa sempre almeno uno di questi strumenti.
  • Re: Angular: come risolvere l'errore “Failed to load resource: net::ERR_CONNECTION_REFUSED”

    jad(v)a ha scritto:


    Ok, però visto che non ho mai fatto una cosa del genere, come posso proseguire? Esiste qualche guida per fare questo? Io sono studente, quindi non conosco ancora questo.
    curl e HTTPie sono strumenti a linea di comando (si usano da una console), quindi un po' più ostici. SoapUI è "grafico" ma complesso (gestisce anche i servizi SOAP). Direi che puoi installare Postman che è "grafico" ma molto semplice e intuitivo: https://www.postman.com/downloads
    Max 5 min. per installarlo e max 1 min. per creare una request. Crei una request (GET, è il default), metti l'url completo, clicchi "Send" e guardi la response. Le request si possono anche salvare in "collection" in modo da poterle rieseguire al volo.
  • Re: Angular: come risolvere l'errore “Failed to load resource: net::ERR_CONNECTION_REFUSED”

    OK grazie.. ci sono riuscita con Postman. Ora cosa devo guardare nello specifico?

    andbin ha scritto:


    jad(v)a ha scritto:


    Ok, però visto che non ho mai fatto una cosa del genere, come posso proseguire? Esiste qualche guida per fare questo? Io sono studente, quindi non conosco ancora questo.
    curl e HTTPie sono strumenti a linea di comando (si usano da una console), quindi un po' più ostici. SoapUI è "grafico" ma complesso (gestisce anche i servizi SOAP). Direi che puoi installare Postman che è "grafico" ma molto semplice e intuitivo: https://www.postman.com/downloads
    Max 5 min. per installarlo e max 1 min. per creare una request. Crei una request (GET, è il default), metti l'url completo, clicchi "Send" e guardi la response. Le request si possono anche salvare in "collection" in modo da poterle rieseguire al volo.
  • Re: Angular: come risolvere l'errore “Failed to load resource: net::ERR_CONNECTION_REFUSED”

    jad(v)a ha scritto:


    OK grazie.. ci sono riuscita con Postman. Ora cosa devo guardare nello specifico?
    Quindi hai fatto la request a quel blablabla/students-list ? Verifica la response!
    Lo status è 200 (=ok)? Hai una struttura JSON con i field e i valori che ti aspettavi? Il Content-type è application/json?
    Hai anche in response un header per il CORS (dovuto al @CrossOrigin)?
  • Re: Angular: come risolvere l'errore “Failed to load resource: net::ERR_CONNECTION_REFUSED”

    Si esattamente, ho inserito l'indirizzo relativo a view-student.
    Lo STATUS è 404 Not Found.

    Ecco i screen:


  • Re: Angular: come risolvere l'errore “Failed to load resource: net::ERR_CONNECTION_REFUSED”

    andbin ha scritto:


    jad(v)a ha scritto:


    OK grazie.. ci sono riuscita con Postman. Ora cosa devo guardare nello specifico?
    Quindi hai fatto la request a quel blablabla/students-list ? Verifica la response!
    Lo status è 200 (=ok)? Hai una struttura JSON con i field e i valori che ti aspettavi? Il Content-type è application/json?
    Hai anche in response un header per il CORS (dovuto al @CrossOrigin)?
    Ti ho risposto con un messaggio sotto. Grazie
    Una osa che ho notato è che mi dice Cannot GET /view-student
  • Re: Angular: come risolvere l'errore “Failed to load resource: net::ERR_CONNECTION_REFUSED”

    jad(v)a ha scritto:


    Si esattamente, ho inserito l'indirizzo relativo a view-student.
    Lo STATUS è 404 Not Found.
    Allora: hai provato innanzitutto con http://localhost:8080/api/students-list ?

    Se ottieni un 404, vuol dire che il server embedded in Spring Boot tecnicamente risponde ma l'url non è uno di quelli mappati ed esposti dal controller.
    In questi casi può anche essere utile leggere il log generato da Spring Boot ed eventualmente (se non è già così), "abbassare" il livello di logging di Spring Boot a DEBUG in modo da avere più informazioni per capire meglio cosa non va.
    Con Spring Boot, di serie NON c'è una context-root specifica, quindi è perfettamente possibile avere una /api direttamente sotto la root del server.

    Il codice per view-student non l'hai neanche postato qui, quindi non ho idea di cosa faccia ...

    ??????

    Altra cosa che mi è venuta in mente rivedendo il codice postato all'inizio: hai fatto (almeno) quei due package che sono

    package Controller;

    e

    package DAO;

    Nella applicazione devi avere anche una classe con il classico main(String[] args) e questa classe va annotata con @SpringBootApplication . Bene, questa classe con il main, dove l'hai messa e in quale package? Questo è importante!
  • Re: Angular: come risolvere l'errore “Failed to load resource: net::ERR_CONNECTION_REFUSED”

    No scusa, avevo provato con l'altro url, cioè http://localhost:4200/view-studen
    Provando con http://localhost:8080/api/students-lis mi esce il seguente errore:

    GET http://localhost:8080/api/students-lis
    Error: connect ECONNREFUSED 127.0.0.1:8080
    Request Headers
    User-Agent: PostmanRuntime/7.26.10
    Accept: */*
    Postman-Token: 33413ee7-cb54-4cdd-9c22-ff6a4157fc21
    Host: localhost:8080
    Accept-Encoding: gzip, deflate, br
    Connection: keep-alive

    Riguardo il codice, lo metto nel post sotto per essere più chiari.
  • Re: Angular: come risolvere l'errore “Failed to load resource: net::ERR_CONNECTION_REFUSED”

    Student-list.component.ts
    import { Component, OnInit } from '@angular/core';  
    import { StudentService } from '../student.service';  
    import { Student } from '../student';  
    import { Observable,Subject } from "rxjs";  
      
    import {FormControl,FormGroup,Validators} from '@angular/forms';  
      
    @Component({  
      selector: 'app-student-list',  
      templateUrl: './student-list.component.html',  
      styleUrls: ['./student-list.component.css']  
    })  
    export class StudentListComponent implements OnInit {  
      
     constructor(private studentservice:StudentService) { }  
      
      studentsArray: any[] = [];  
      dtOptions: DataTables.Settings = {};  
      dtTrigger: Subject<any>= new Subject();  
      
      students: Observable<Student[]>;  
      student : Student=new Student();  
      deleteMessage=false;  
      studentlist:any;  
      isupdated = false;      
       
      
      ngOnInit() {  
        this.isupdated=false;  
        this.dtOptions = {  
          pageLength: 6,  
          stateSave:true,  
          lengthMenu:[[6, 16, 20, -1], [6, 16, 20, "All"]],  
          processing: true  
        };     
        this.studentservice.getStudentList().subscribe(data =>{  
        this.students =data;  
        this.dtTrigger.next();  
        })  
      }  
        
      deleteStudent(id: number) {  
        this.studentservice.deleteStudent(id)  
          .subscribe(  
            data => {  
              console.log(data);  
              this.deleteMessage=true;  
              this.studentservice.getStudentList().subscribe(data =>{  
                this.students =data  
                })  
            },  
            error => console.log(error));  
      }  
      
      updateStudent(id: number){  
        this.studentservice.getStudent(id)  
          .subscribe(  
            data => {  
              this.studentlist=data             
            },  
            error => console.log(error));  
      }  
      
      studentupdateform=new FormGroup({  
        student_id:new FormControl(),  
        student_name:new FormControl(),  
        student_email:new FormControl(),  
        student_branch:new FormControl()  
      });  
      
      updateStu(updstu){  
        this.student=new Student();   
       this.student.student_id=this.StudentId.value;  
       this.student.student_name=this.StudentName.value;  
       this.student.student_email=this.StudentEmail.value;  
       this.student.student_branch=this.StudentBranch.value;  
       console.log(this.StudentBranch.value);  
         
      
       this.studentservice.updateStudent(this.student.student_id,this.student).subscribe(  
        data => {       
          this.isupdated=true;  
          this.studentservice.getStudentList().subscribe(data =>{  
            this.students =data  
            })  
        },  
        error => console.log(error));  
      }  
      
      get StudentName(){  
        return this.studentupdateform.get('student_name');  
      }  
      
      get StudentEmail(){  
        return this.studentupdateform.get('student_email');  
      }  
      
      get StudentBranch(){  
        return this.studentupdateform.get('student_branch');  
      }  
      
      get StudentId(){  
        return this.studentupdateform.get('student_id');  
      }  
      
      changeisUpdate(){  
        this.isupdated=false;  
      }  
    }  

    student-list.component.html
    <div class="panel panel-default">  
      <div class="panel-heading">  
          <h1 style="text-align: center">Students</h1><br>  
          <div class="row" [hidden]="!deleteMessage">  
                 
                    <div class="col-sm-4"></div>  
                    <div class="col-sm-4">  
                            <div class="alert alert-info alert-dismissible">  
                                    <button type="button" class="close" data-dismiss="alert">×</button>  
                                    <strong>Student Data Deleted</strong>  
                            </div>  
                    </div>  
                    <div class="col-sm-4"></div>  
            </div>             
        </div>  
      
        
      <div class="panel-body">  
          <table  class="table table-hover table-sm" datatable [dtOptions]="dtOptions"  
          [dtTrigger]="dtTrigger"  >  
              <thead class="thead-light">  
                  <tr>  
                      <th>Student Name</th>  
                      <th>Student Email</th>  
                      <th>Student Branch</th>  
                      <th>Action</th>  
                        
                  </tr>  
              </thead>  
              <tbody>  
                   <tr *ngFor="let student of students ">  
                      <td>{{student.student_name}}</td>  
                      <td>{{student.student_email}}</td>  
                      <td>{{student.student_branch}}</td>  
                      <td><button (click)="deleteStudent(student.student_id)" class='btn btn-primary'><i class="fa fa-futboll-0">Delete</i></button>   
                        <button (click)="updateStudent(student.student_id)" class='btn btn-info'  
                        data-toggle="modal" data-target="#myModal">Update</button>  
                      </td>  
                    </tr>   
              </tbody><br>  
          </table>  
      </div>  
    </div>   
      
    <div class="modal" id="myModal">  
            <div class="modal-dialog">  
              <div class="modal-content">  
                    <form [formGroup]="studentupdateform" #updstu (ngSubmit)="updateStu(updstu)">  
                <!-- Modal Header -->  
                <div class="modal-header">  
                  <h4 class="modal-title" style="text-align: center">Update Student</h4>  
                    
                </div>  
                  
                <!-- Modal body -->  
                <div class="modal-body" *ngFor="let student of studentlist " >  
                    <div [hidden]="isupdated">  
      
                        <input type="hidden" class="form-control"  formControlName="student_id" [(ngModel)]="student.student_id">  
                                <div class="form-group">  
                                    <label for="name">Student Name</label>  
                                    <input type="text" class="form-control"  formControlName="student_name" [(ngModel)]="student.student_name"  >  
                                </div>  
                          
                                <div class="form-group">  
                                    <label for="name">Student Email</label>  
                                    <input type="text" class="form-control" formControlName="student_email" [(ngModel)]="student.student_email">  
                                </div>  
                          
                                <div class="form-group">  
                                    <label for="name">Student Branch</label>  
                                      <select class="form-control" formControlName="student_branch" required>                                     
                                        <option value="B-Tech" [selected]="'B-Tech' == student.student_branch">B-Tech</option>  
                                        <option value="BCA" [selected]="'BCA' == student.student_branch">BCA</option>  
                                        <option value="MCA" [selected]="'MCA' == student.student_branch" >MCA</option>  
                                        <option value="M-Tech" [selected]="'M-Tech' == student.student_branch">M-Tech</option>  
                                      </select>                                 
                                </div>                     
                      </div>    
                      <div [hidden]="!isupdated">  
                          <h4>Student Detail Updated!</h4>  
                      </div>          
                          
                </div>  
                  
                <!-- Modal footer -->  
                <div class="modal-footer" >  
                  <button type="submit" class="btn btn-success" [hidden]="isupdated">Update</button>  
                  <button type="button" class="btn btn-danger" data-dismiss="modal" (click)="changeisUpdate()">Close</button>  
                </div>  
                  
            </form>  
              </div>  
            </div>  
          </div>  
    Il metodo main è in StudentApplication.java, ossia:
    package config;  
      
    import org.springframework.boot.SpringApplication;  
    import org.springframework.boot.autoconfigure.SpringBootApplication;  
      
    @SpringBootApplication  
    public class StudentApplication {  
      
        public static void main(String[] args) {  
            SpringApplication.run(StudentApplication.class, args);  
        }  
      
    }  
Devi accedere o registrarti per scrivere nel forum
18 risposte