Angular $ resource PUT 400 Bad Request (отправлено $ resol и $ обещание)

0

У меня есть следующая служба (с удаленными переменными):

angular
    .module('app')
    .factory('Employee', function($resource) {
        return $resource("https://api.mongolab.com/api/1/databases/:dbName/collections/:collectionName/:id",
        {apiKey: apiKey, dbName: dbName, collectionName: collectionName},
        { update: { method: 'PUT' } });
});

У меня есть следующий код в контроллере формы добавления/редактирования для создания/получения сотрудника:

if($stateParams.id === "add") {
    $scope.employee = new Employee();
} else {
    $scope.employee = Employee.get({id: $stateParams.id});
}

Теперь в моей форме у меня есть кнопка " Save, которая имеет следующую функцию:

if($scope.employee._id) {
    $scope.employee.$update({id:$scope.employee._id});
} else {
    $scope.employee._id = $scope.employee.jmbg;
    $scope.employee.$save();
}

Функциональность "Добавить" работает так, как ожидалось, но когда я обновляю существующего сотрудника, я получаю следующую ошибку:

400 Bad Request - Invalid object { "_id" : "000" , "jmbg" : "000" , "name" : "Bilbo" , "surname" : "Hagins" , "email" : "[email protected]" , "$promise" : { } , "$resolved" : true} - Document field names can't start with '$' (Bad Key: '$promise')

Теперь мой $scope.employee действительно содержит эти два поля, но это первый случай, когда я столкнулся с такой ошибкой, и у меня уже была эта функция для других проектов (даже тех, которые используют тот же API MongoLab для бэкэнд и как насколько я могу судить, нет никакой разницы в коде из этого другого проекта и этого).

Также обратите внимание, что в моем угловом приложении нет никакой конфигурации.

  • 1
    Возможно, вы смешиваете версии Angular и Angular Resource. До версии 1.3 все свойства, начинающиеся с $ , не отправлялись на сервер Angular. Теперь служба ресурсов должна сама удалить эти свойства.
  • 0
    Возможно, вам не хватает идентификатора в параметрах {apiKey: apiKey, dbName: dbName, collectionName: collectionName}, идентификатор требуется при обновлении записи с помощью $ update
Показать ещё 1 комментарий
Теги:
resources
bad-request

1 ответ

0

При выполнении запроса PUT, angularjs автоматически добавляет $promise prom и $resolved.

Итак, в конечной точке вы должны обязательно удалить эти атрибуты,

как в следующем примере, используя экспресс-маршрутизатор.

router.route('/contact/:id').put(function(req, res) { var contact = req.body; delete contact.$promise; delete contact.$resolved;//update the database });

Но не уверен, почему angularjs добавляет $promise prom и $resolved по запросу PUT.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню