Wysłanie POSTa na inny adres niż adres apki

0
app.service('UserCRUDService',['$http', function ($http) {

    this.getUser = function getUser(userId){
        return $http({
            method: 'GET',
            url: 'users/'+userId
        });
    }

    this.addUser = function addUser(name, email){
        return $http({
            method: 'POST',
            url: '/users',
            data: {name:name, email:email}
        });
    }

    this.deleteUser = function deleteUser(id){
        return $http({
            method: 'DELETE',
            url: 'users/'+id
        })
    }

    this.updateUser = function updateUser(id,name,email){
        return $http({
            method: 'PATCH',
            url: 'users/'+id,
            data: {name:name, email:email}
        })
    }

    this.getAllUsers = function getAllUsers(){
        return $http({
            method: 'GET',
            url: 'users'
        });
    }

}]);

Mam taki kod. Generalnie wysyłanie POSTa działa, aczkolwiek jeżeli apka stoi na localhost:8080 to funkcja addUser uderzy pod localhost:8080/users. Moje pytanie brzmi jak zrobić aby można było wysłać POSTa pod inny adres np: localhost:8090/users. Oczywiście wpisywałem to w polu url, aczkolwiek wtedy w ogóle się nie wysyła.

0

Powinno się wysyłać. Nie pojawia się w ogóle request? Nawet błędny?

0
sintloer napisał(a):

Powinno się wysyłać. Nie pojawia się w ogóle request? Nawet błędny?

Okazuje się, że zamiast POSTa leci OPTIONS. To chyba coś związane z cross-origin. Da się to wyłączyć po stronie Angulara ? Requesty wysyłam do Springowego backendu.

0

Zawsze przed właściwym zapytaniem leci OPTIONS - jest to zwyczajne zachowanie przeglądarki w przypadku CORS i nie da się tego wyłączyć.

0
Patryk27 napisał(a):

Zawsze przed właściwym zapytaniem leci OPTIONS - jest to zwyczajne zachowanie przeglądarki w przypadku CORS i nie da się tego wyłączyć.

W linku wyżej i na stacku jest napisane, że jednak jakoś się da.

0

W ten sposób nie wyłączasz wysyłania OPTIONS, tylko obchodzisz całe CORS - i nie jest to rozwiązanie problemu (którym byłaby prawidłowa implementacja CORS po stronie backendu), a jedynie jego obejście.

0

Mnie to póki co zadowala. Masz jakiś pomysł co dopisać do Angulara żeby przeszło ?

0
Wielki Terrorysta napisał(a):

Proxy to Backend?

https://github.com/angular/angular-cli/blob/master/docs/documentation/stories/proxy.md

Przecież tutaj podał Tobie link z konfiguracją proxy. Tworzysz sobie plik np proxy.config.js. W nim dajesz coś takiego:

{
  "/api": {
    "target": "http://localhost:8090", // Adres backendu
    "secure": false
  }
}

I w NPMie do skryptu uruchamiającego musisz dodać: ng serve --proxy-config ./proxy.config.js. A przy wywołaniach dodajesz w URLu ten fragment /api czyli u Ciebie np.

    this.addUser = function addUser(name, email){
        return $http({
            method: 'POST',
            url: '/api/users', // <- tutaj zmiana
            data: {name:name, email:email}
        });
    }

Możesz do konfiguracji dodać pathRewrite żeby w URLu nie było tego fragmentu /api czyli będzie to coś takiego:

{
  "/api": {
    "target": "http://localhost:8090", // Adres backendu
    "secure": false,
    "pathRewrite": {
      "^/api": ""
    }
  }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1