При синтаксическом анализе запроса DELETE с помощью express и body-parser тело не указывается

Я использую expressjs и промежуточное программное обеспечение body-parser.

Вот как я это инициирую:

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

От клиента я отправляю запрос DELETE, и когда я пытаюсь забрать его со стороны сервера, я получаю пустой объект:

app.delete('/', function(req, res) {
    console.log(util.inspect(req.body)); //outputs {}
    //some more code
});

однако, когда я отправляю его с POST, я получаю то, что мне нужно:

app.post('/delete', function(req, res) {
    console.log(util.inspect(req.body)); //outputs { mid: 'ffw1aNh2' }
    //some more code
});

Стоит отметить, что я ничего не меняю на стороне клиента (angularjs), но метод, а также URL-адрес и сетевой отладчик firefox показывают данные, отправляемые в обеих ситуациях.

Чего здесь не хватает? Почему я получаю пустой объект body в методе удаления?

1 ответ

Решение

Исходный код службы $http, запрос DELETE с использованием $http, не позволяет отправлять данные в теле запроса.

Спецификация для запроса DELETE несколько расплывчата относительно того, следует ли разрешать тело запроса, но Angular не поддерживает его.

Единственными методами, которые допускают использование тел запросов, являются POST, PUT и PATCH. Так что проблема не в вашем коде, а в службе $http Angular.

Использовать этот

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

а потом

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

Другие вопросы по тегам