AngularJS – 预期的响应包含一个对象,而不是有一个数组

我正在尝试在Angular中创build一个对象。

这是我的工厂

angular.module('myApp') .factory('Order', function($resource) { return $resource('/api/products?id=:id/orders?id=:orderId', { id: "@_id" }, { query: { method: 'GET', isArray: false }, update: { method: 'PUT'} }); }); 

这是我的控制器

 angular.module('myApp').controller('OrderCtrl', function ($scope, $rootScope, $stateParams, Order, Auth) { $scope.myOrder = Order.get({"id": 1, "orderId": 1}); } }); 

这是我的服务器目录中的routes.js文件

 app.use('/api/products', require('./api/product')); 

在我的api / products目录中,我有一个索引文件

 var express = require('express'); var controller = require('./product.controller'); var router = express.Router(); // Endpoints for products router.get('/', controller.index); router.get('/:id', controller.show); router.post('/', controller.create); router.put('/:id', controller.update); router.patch('/:id', controller.update); router.delete('/:id', controller.destroy); // Endpoints for product - order definitions router.get('/:id/orderDefinitions', controller.showOrderDefinitions); router.post('/:id/orderDefinitions', controller.addOrderDefinitions); // Endpoints for product - orders router.get('/:id/orders', controller.showProductOrders); router.get('/:id/orders/:orderId', controller.showIndividualProductOrder); router.put('/:id/orders/:orderId', controller.updateIndividualProductOrder); router.delete('/:id/orders/:orderId', controller.deleteOrder); module.exports = router; 

这是我试图访问的两个端点

 router.get('/:id/orders/:orderId', controller.showIndividualProductOrder); router.put('/:id/orders/:orderId', controller.updateIndividualProductOrder); 

这是我的控制器

 exports.showIndividualProductOrder = function(req, res) { Product.findById(req.params.id, function (err, product) { if(err) { return handleError(res, err); } if(!product) { return res.send(404); } Order.find({productId: product._id, _id: req.params.orderId}, function (err, order) { console.log("found individual product order", order); if(err) { return handleError(res, err); } if(!order) { return res.send(404); } // Get product's order return res.json(order[0]); }); }); }; // Update an individual order for a product exports.updateIndividualProductOrder = function(req, res) { Order.find({productId: product._id, _id: req.params.orderId}, function (err, order) { if(err) { return handleError(res, err); } if(!order) { return res.send(404); } var updatedOrder = _.merge(order, req.body); console.log("updating order", order, updatedOrder); updatedOrder.save(function (err) { if (err) { return handleError(res, err); } return res.json(200, product); }); }); }; 

但是,我仍然得到这个错误

错误:[$ resource:badcfg]动作get资源configuration错误。 预期的响应包含一个对象,但得到一个数组(请求:GET / api / products?id = 1 / orders?id = 1)

我使用Postman来testingAPI端点,而JSON输出是一个数组。 但在我的工厂,我明确表示,我不想要一个数组与isArray选项。

我使用Postman来testingAPI端点,而JSON输出是一个数组。 但在我的工厂,我明确表示,我不想要一个数组与isArray选项。

使用isArray标志,你不指定你想要的 ,你指定在特定的API端点上预期的是什么。

如果不需要数组,则更改后端代码,但如果它是数组,则在configuration中使用isArray: true

编辑:您可以使用tranformResponse属性为数据指定一个转换器函数,这将使您能够使用返回对象的端点,但仍然使用为isArray:true (反之亦然)数组configuration的资源方法,请参阅这个答案为例。