node.js stack教學 angular $ resource delete不會將body發送到express.js服務器




nodejs express js (5)

以下為我工作:

$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了解更多信息。

惠,

我正在服務器端使用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中保存它可以正常工作。

我在這裡失踪了什麼(敲打我的腦袋)。

謝謝。


剛遇到這個問題。 你必須使用url params來發送帶刪除的id。

在快遞:

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

並以角度添加到網址:

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

這對我有用。

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

接著

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

根據此堆棧溢出問題$http服務源代碼 ,使用$httpDELETE請求不允許在請求正文中發送數據。 對於是否應該允許請求體, DELETE請求的規範有些模糊,但Angular不支持它。

允許請求主體的唯一方法是POSTPUTPATCH 。 所以問題不在你的代碼中的任何地方,而是在Angular的$http服務中。

我的建議是使用通用的$http(...)函數並傳入正確的方法:

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

默認情況下,Angular將Content-Type作為text / plain發送給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" };