При синтаксическом анализе запроса 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 })