programing

angular $resource delete가 express.js 서버로 본문을 전송하지 않습니다.

mailnote 2023. 11. 7. 21:02
반응형

angular $resource delete가 express.js 서버로 본문을 전송하지 않습니다.

혜,

서버 쪽에 angular.js와 node.js(Express.js)가 있는 앱을 만들고 있습니다.

어떤 이유로 저는 삭제 요청을 처리하는 데 문제가 있습니다.아무도 서버 쪽으로 접근하지 못하고 있습니다.

이것은 나의 angular.js 리소스 코드입니다.

$scope.deleteProject = function(projectName){
    var postData = {username: 'name', projectName: projectName};
    Project.deleteProject.delete({}, postData,
        function(res){
            alert('Project Deleted');
        },
        function(err){
            alert(err.data);
    });
}

서버 쪽에 다음과 같은 내용이 있습니다.

var deleteProject = function(req, res){
    console.log(req.body);
    console.log(req.params);
    if (req.body.projectName){
        //do something
        return res.send(200);
    }
    else
        return res.send(400, 'no project name was specified');
}

지금은 어떤 이유에서인지 몸이 전혀 없습니다!!비어있습니다.경로를 app.delete로 정의했습니다.

node.js에서 post로 경로를 변경하고 angular.js에서 저장하면 잘 작동합니다.

내가 여기서 놓치고 있는 게 뭐죠?

감사해요.

스택 오버플로 질문서비스 소스 코드에 따르면, a.DELETE사용요청$http는 요청 본문에서 데이터 전송을 허용하지 않습니다.DELETE 요청 사양은 요청 기관을 허용해야 하는지 여부에 대해 다소 모호하지만 Angular는 이를 지원하지 않습니다.

요청 기관을 허용하는 유일한 방법은POST,PUT,그리고.PATCH. 그래서 문제는 코드 어디에도 없는 Angular's에 있습니다.$http서비스.

제 제안은 일반적인 것을 사용하는 것입니다.$http(...)적절한 방법으로 기능하고 전달합니다.

$http({
    method: 'DELETE',
    url: '/some/url',
    data: {...},
    headers: {'Content-Type': 'application/json;charset=utf-8'}
})

기본적으로 Angular는 DELETE 요청에 대해 내용 유형을 텍스트/평면으로 보냅니다.머리글에 추가하기만 하면 됩니다.

  var config = {
    method: "DELETE"
    url: yourUrl
    data: yourData
    headers: {"Content-Type": "application/json;charset=utf-8"}
  };

  $http(config);

모든 DELETE 요청에 추가하려면 메인 컨트롤러의 app.config 메서드에 추가합니다.

 $httpProvider.defaults.headers.delete = { "Content-Type": "application/json;charset=utf-8" };

$http 대신 $resource 개체를 사용하려면 추가해야 합니다.hasBody그리고.headers다음과 같이

delete:  {
    method: 'DELETE',
    hasBody: true,
    headers: {"Content-Type": "application/json;charset=UTF-8"}
  }

나를 위해 일했습니다.

방금 이 문제에 부딪혔습니다.url params를 사용해서 id를 삭제해서 보내야 합니다.

급행으로:

app.delete('/api/user/:userId', user.remove);

url에 각진 형태로 추가합니다.

$http({url: 'whatever/api/'+obj.id, method: 'DELETE'}) ...

저는 다음과 같은 일을 합니다.

$httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
$httpProvider.defaults.headers.common['Content-Type'] = 'application/json;charset=utf-8';

XMLHttpRequest는 선택 사항이지만 ajax를 보내는 경우 유용합니다.자세한 내용은 https://docs.angularjs.org/api/ng/provider/$httpProvider .

저는 이게 통했어요.

$httpProvider.defaults.headers.delete = { "Content-Type": "application/json;charset=utf-8" };

그리고 나서.

$http.delete(url, { data: data })

언급URL : https://stackoverflow.com/questions/22186671/angular-resource-delete-wont-send-body-to-express-js-server

반응형