2016-10-13 2 views
0

서비스에서 데이터를 전달할 때 서비스 API 삭제시 각도 js로 작업 중입니다. 400 개의 잘못된 요청 오류가 표시됩니다.이 서비스를 호출하는 JS입니다.Angular js 서비스 삭제를 위해 데이터를 전달하는 방법은 무엇입니까?

$scope.deleteUser = function(id){ 
    var data = 'Id='+id; 

    DataService.deleteUser(data).then(function successCallback(response) { 
     console.log('deleted'); 
    }, function errorCallback(response) { 
      console.log(response); 

    }); 

} 

사용자를 삭제하는 서비스입니다. 당신이로 설정 객체를 전달해야하므로

curl -v -H "X-Auth-Token: mytoken" -X DELETE -F Id=665799088 http://<ipaddress>/users

+0

$ http 서비스의 documention [delete method] (https://docs.angularjs.org/api/ng/service/$http#delete)에 따르면 2 개의 매개 변수, url 및 config 만 허용합니다. 즉, 현재 데이터가 있음을 의미합니다. config와 같이 취급합니다. 대부분의 경우 config 객체에 params 옵션을 전달하려고합니다. – nubinub

+0

API에서 'ID'를 어떻게 수락합니까? 요청 본문에서 가져 왔습니까? –

+1

또한, 만약 당신이 당신의 손을 가지고 있는지 모르겠지만, ID가 '/ users/id'에 대한 삭제와 같은 URL의 일부라면 더 정확할 것이라고 생각합니다. – nubinub

답변

0

$ http.delete에 두번째 매개 변수는 설정이다 :

service.deleteUser = function(data){ 
       var config = { 
        headers: { 
         'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 
         'X-Auth-Token': 'mytoken' 
        } 
       }; 
       return $http.delete(mainURL + '/users', data, config); 
}; 

이 내가 데이터를 전달해야 컬 API 요청은 두 번째 매개 변수 및 데이터가 아닙니다.

DELETE 메소드 유형은 요청 본문을 허용하지 않으므로 ID를 데이터로 전달해서는 안됩니다. 대신 당신이 당신의 API에 ID를 전달하는 방법을 또한 확인 서비스 사용이

return $http.delete(mainURL + '/users?Id='+data, config); 

에 따라서이 http://main_url/users?Id=id

을 시도합니다. 쿼리 매개 변수로 ID를 전달하는 경우 위의 작동합니다 있지만 경로 매개 변수로 다음 위의 URL을 작동하지 않을 경우 CURL 식에서 나는 쿼리 문자열에 ID를 전달하는 믿습니다 및 경로 매개 변수가 아닙니다.

+0

나는 쿼리 문자열로 ID를 전달하기 위해 테스트했다. 커맨드 프롬프트에서 curl 서비스를 누른 다음 오류없이 응답을 리턴한다. –

+0

위와 같이 삭제 상태를 수정하더라도 잘못된 요청을 받고 있습니까? 또는 $ http.delete (mainURL + '/ users /'+ data, config)를 반환하십시오. 일부 API는 기본 경로 매개 변수로 ID를 사용합니다. –

+0

'/ users'에 delete 메소드가 없다면 리턴 코드는 아마도 405와 비슷할 것입니다. – nubinub

0

documentation$http 서비스에 따르면 삭제 방법은 2 개의 매개 변수 url 및 config 만 허용합니다. 즉, 데이터가 현재 config와 같이 취급됩니다. 대부분의 경우 config 객체에 params 옵션을 전달하려고합니다.

DataService.deleteUser(id).then(function successCallback(response) { 
    console.log('deleted'); 
}, function errorCallback(response) { 
     console.log(response); 

}); 

귀하의 서비스 선언은 더 비슷해야합니다.

service.deleteUser = function(id){ 
       var config = { 
        headers: { 
         'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 
         'X-Auth-Token': 'mytoken' 
        }, 
        params : { 
         id : id 
        } 
       }; 
       return $http.delete(mainURL + '/users', config); 
      }; 

또한 당신이 API를 담당하는 경우 /users/id처럼 보이는 경로가 더 정확 명심하십시오.

+0

URL에 보안 정보를 배치하는 것에 대한주의 사항이 필요합니다. ID가 SSN과 같은 경우이 정보는 HTTPS를 사용하는 경우에도 여러 시스템에 일반 텍스트로 로그온합니다. – Enzey

+0

config에 params를 전달하려고 시도했을 때 "No 'Access-Control-Allow-Origin'헤더가 요청 된 리소스에 존재합니다"라는 오류가 발생했습니다. –

+0

그러면 config-headers 속성에'Access-Control-Allow-Origin'을 추가 할 수 있습니다. – nubinub

관련 문제