2015-04-22 3 views
5

Так что я смотрел на это сообщение: is an entity body allowed for an http delete request

Который, кажется, указывает, что в то время как это «ОК», чтобы сделать на каком-концептуальном уровне, на практике это может быть не выполнимо, потому что браузеры просто игнорируют его.

У меня есть промежуточное программное обеспечение для проверки подлинности express.js. Мне нужно пройти, и я не хочу прикладывать свои данные пользователя к параметрам url. Все мои другие запросы, требующие аутентификации, присоединяют эти данные к телу запроса.

Есть ли способ заставить это? Я видел несколько других сообщений, где некоторые люди, казалось, добились успеха в передаче тела с просьбой об удалении.

Я запускаю кончик узла/паруса. Он всегда регистрирует тело как неопределенное для запроса удаления. Есть ли способ изменить

ответ

3

API-интерфейсов sails отделяет идентификатор объекта для удаления из параметров, поэтому мы должны добавить идентификатор к URL-адресу.

Но если я хочу передать некоторые данные аутентификации в теле для проверки на стороне сервера перед обработкой запроса на удаление, я не могу просто привязать их к объекту в качестве второго параметра запроса на удаление, как вы можете с помощью $ http.post.

Метод почтового отправления автоматически присваивает то, что мы вставляем в качестве второго параметра в тело запроса, но метод удаления не.

Метод Angular's $ http.delete позволяет нам предоставлять конфигурационный объект в качестве второго параметра, через который мы можем получить доступ к свойству data. Это то же самое, что и сообщение через второй параметр.

Так что, если нам нужно прикрепить тело к удалению запроса мы можем использовать следующее:

$http.delete('/api/' + objectToDelete.id, {data: {id: currentUser().id, level: currentUser().level}}); 

Это будет передавать объект, чтобы удалить идентификатор в параметре URL-адрес, и мои учетные данные в теле объект.

+0

Странно, я пробовал этот метод на Angular 1.4.x, и запрос отправляется без кузова. Это работает для других людей? – chrisvdb

+0

Это не работает для меня ни для Angular 1.4.2 –

+0

Не работает на Angular 1.5 –

2

Честно говоря, каждый раз, когда проблема звучит как «ограничение как REST», переосмысление стратегии и философии может быть хорошей идеей.

У меня есть некоторые проверки подлинности промежуточного программного мне нужно пройти через

Я не хочу, чтобы прикрепить мои данные пользователя в URL PARAMS

Я прямо не отвечает на вопрос, но вы должны знать, что среди достоянию

  • параметры URL (или запроса, но в любом случае URL)
  • Тело

есть третий вариант «передачи значений на сервер»:

  • запроса Headers

Я просто предлагаю рассмотреть, что третий вариант, чтобы предоставить учетные данные : запрос заголовок.

Edit: следующее приложение будет просто применить к любому «внешнего» промежуточного программного обеспечения, как прокси-сервер или что-то, а не истинный экспресс промежуточного слоя внутри sails.js

Кроме того, это было бы хорошо что ваше промежуточное ПО разделило эти заголовки, прежде чем перенаправить на реальное действие.

+0

Спасибо за ввод. Я принял во внимание то, что вы сказали, и добавил дополнительный заголовок в мой auth-перехватчик. Можете ли вы рассказать об этом, было бы полезно разбить заголовки в промежуточном программном обеспечении? – tpie

+0

Вы сделали мой 50 реп, чтобы я мог ответить вам здесь! = p Я не знаю, что вы подразумеваете под «промежуточным программным обеспечением», поэтому я предложил, чтобы это было, например. другой сервер или, возможно, другая часть кода (чисто обработка auth, без каких-либо связей с реальными действиями), он не должен перенаправлять эти заголовки для целей безопасности. Редактировать: Если вы придерживаетесь чисто внутренних парусов, это необязательно, чтобы стричь учетные данные перед входом в контроллер, но если auth снаружи, подумайте об этом. –

+0

«Middleware - это функция с доступом к объекту запроса (req), объекту ответа (res) и следующему промежуточному программному обеспечению в строке цикла запроса-ответа приложения Express, обычно обозначаемому переменной с именем next.« В принципе, вы можете вводить функции, чтобы передать запрос до того, как вы действительно получите все, что вы собираетесь делать с запросом. – tpie

Смежные вопросы