Ожидаемый ответ содержать объект, но получил массив

Я получаю эту ошибку, я нашел много потоков с тем же сообщением, но, похоже, это не соответствует моему делу, и я не решил его решить.

В общем, все было нормально, пока я не попытался создать 1 форму для создания и обновления объекта "Автомобиль".

Вот презентация моего приложения (постройте из этого шаблона: https://github.com/linnovate/mean):

/public/js/config.js:

[...]
  .state('edit car', {
    url: '/cars/:carId/edit',
    templateUrl: 'views/cars/edit.html'
})
  .state('create car', {
    url: '/cars/create',
    templateUrl: 'views/cars/edit.html'
})

/public/js/services/mycars.js(не знаю, какие службы используются для...):

//Cars service used for car REST endpoint
angular.module('mean.mycars').factory('Cars', ['$resource', function($resource) {
return $resource('cars/:carId', {
    carId: '@_id'
}, {
    update: {
        method: 'PUT'
    }
});
}]);

общественные/JS/контроллеры/mycars.js:

angular.module('mean.mycars').controller('MyCarsController', ['$scope', '$http', '$stateParams', '$location', 'Global', 'Cars',
function ($scope, $http, $stateParams, $location, Global, Cars) {

    $scope.findOneOrCreate = function () {
        // create a new car
        var car = new Cars({
            id : null,
            marque: this.marque,
            modele: this.modele,
            desc: this.desc
        });

        // put new car in scope
        $scope.car = car;

        // if there is a param, search for the car (mode update)
        if ($stateParams.carId !== null){
            Cars.get({
                carId: $stateParams.carId
            }, function(carTmp) {
                       // put the result in scope
                        $scope.car = carTmp;
                    });
        }
    };

   $scope.createOrUpdate = function () {
        var car = $scope.car;

        if (car.id !== null) {
        // update
            if (!car.updated) {
                car.updated = [];
            }
            car.updated.push(new Date().getTime());

            car.$update(function () {
                $location.path('cars/' + car._id);
            });
        }
        else {
            //Create
            car.$save(function (response) {
                $location.path('cars/' + response._id);
            });
        }
    };

И наконец мой взгляд: edit.html:

<section data-ng-controller="MyCarsController" data-ng-init="findOneOrCreate()">
    <form class="form-horizontal col-md-6" role="form" data-ng-submit="createOrUpdate()">
        <div class="form-group">
            <label for="title" class="col-md-2 control-label">Title</label>
            <div class="col-md-10">
                <input type="text" class="form-control" data-ng-model="car.modele" id="title" placeholder="Title" required>
            </div>
        </div>
        <div class="form-group">
            <label for="content" class="col-md-2 control-label">Content</label>
            <div class="col-md-10">
                <textarea data-ng-model="car.marque" id="content" cols="30" rows="10" placeholder="Content" class="form-control" required></textarea>
            </div>
        </div>
        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <button type="submit" class="btn btn-default">Submit</button>
            </div>
        </div>
    </form>
</section>

Изменить для добавления информации: Предполагается, что веб-службы возвратят только один автомобиль (но не уверены, что они делают), вот они:

exports.car = function(req, res, next, id) {
Car.load(id, function(err, car) {
    if (err) return next(err);
    if (!car) return next(new Error('Failed to load car ' + id));
    req.car = car;
    next();
});
};

exports.create = function(req, res) {
var car = new Car(req.body);
car.user = req.user;

car.save(function(err) {
    if (err) {
        return res.send('users/signup', {
            errors: err.errors,
            car: car
        });
    } else {
        res.jsonp(car);
    }
});
};

exports.update = function(req, res) {
var car = req.car;

car = _.extend(car, req.body);

car.save(function(err) {
    if (err) {
        return res.send('users/signup', {
            errors: err.errors,
            car: car
        });
    } else {
        res.jsonp(car);
    }
});
};

Сообщение об ошибке появляется, когда я иду в /cars/create, а не когда я иду в /cars/: carsId/edit:

Error: [$resource:badcfg] Error in resource configuration. Expected response to contain an object but got an array
http://errors.angularjs.org/1.2.15/$resource/badcfg?p0=object&p1=array

Ответы

Ответ 1

Возвращает ли ваш веб-сервис массив? Метод get ожидает, что будет возвращен только один объект, и то же самое с вашим запросом PUT, если вы что-то возвращаете. Если вы ожидаете нескольких, вам нужно указать isArray: true в вашем методе обслуживания в mycars.js. Пример здесь: http://docs.angularjs.org/api/ngResource/service/$resource