node.js - stack教學 - nodejs express js




angular $ resource delete不會將body發送到express.js服務器 (4)

惠,

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

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

謝謝。


以下為我工作:

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


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

在快遞:

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

並以角度添加到網址:

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

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

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

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

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

這對我有用。

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

接著

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