预期的响应包含一个对象,但有一个数组

我得到这个错误,我发现许multithreading都有相同的信息,但它似乎从未匹配我的情况,而我没有经理来解决它。

基本上,一切都还好,直到我试图制作1个表格来创build和更新“汽车”对象。

这里是我的应用程序的演示文稿(从这个模板构build: 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> 

编辑添加信息:networking服务应该只返回一辆车(但不知道他们是否),在这里他们是:

 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); } }); }; 

出现错误消息,当我去/汽车/创build,而不是当我去/汽车/:carsId /编辑:

 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 

你的Web服务是否返回一个数组? get方法只需要返回一个对象,如果你正在返回一个对象,那么你的PUT请求也是一样的。 如果您期待多个,则需要在isArray: true的service方法中指定isArray: true 。 看到这里的例子: http : //docs.angularjs.org/api/ngResource/service/$resource