我已经在这里阅读了类似问题的答案,但似乎没有一个能够解决我所看到的问题。给出:
var app = angular.module("eg", ["ngResource", "postAPI"]);
var postAPI = angular.module("postAPI", ["ngResource"]);
postAPI.factory("Post", ["$resource",
function postFactory(resource) {
return resource("/post");
}
]);
postAPI.controller("PostIndexCtrl", ["$scope", "Post",
function($scope, Post) {
Post.query(function(data) {
$scope.response = data;
});
}
]);
postAPI.controller("CreateCtrl", ["$scope", "Post",
function($scope, Post) {
Post.save({
title: "Title",
body: "Body",
tags: ["one", "two", "three"],
});
}
]);
收到错误(docs):“操作save
的资源配置出错。包含对象但得到数组的预期响应”。
哪个会好的,除了我可以看到我的后端 返回一个对象。用curl测试:
curl -H "Content-Type: application/json" -X POST -d '{"title":"foo","body":"bar","tags":["wombat"]}' http://localhost:8080/post/
响应:
{"title":"foo","body":"bar","tags":["wombat"],"created":"...","modified":"...","id":12345}
(为简洁起见,编辑格式相同)。 PostIndexCtrl按预期工作,返回一个post对象数组。关于为什么CreateCtrl在curl工作正常时可能会看到数组的任何线索?
答案 0 :(得分:1)
使用isArray: false
isArray – {boolean=}
如果为true,则此操作的返回对象是数组
return $resource("/post", {}, {
'query': {
method: 'GET',
isArray: false
},
'get': {
method: 'GET',
isArray: true
}
});

答案 1 :(得分:1)
嗯,这是我常见的愚蠢错误。然而,错误有点'有趣'来解释,所以如果有人在同一事情发生同样的事情,这里是一个总结。
我的API针对路径/post/
返回了不同于/post
的不同回复。 /post/
按预期运行,这就是我用curl检查的内容。但是当我在curl语法中删除尾部斜杠时,我回来了:
<html>
<head>
<title>404 Not Found</title>
</head>
<body>
...
等。从我可以收集到的,角度尝试序列化这个并最终得到一个数组,因此错误。我没有彻底测试后端我的错,尽管在我的辩护中它适用于GET请求(/post/
和/post
返回JSON)。因此,自从我注意到Angular正在剥离它之后,我采取了尾随斜线。
无论如何,希望这可以帮助那些陷入同一个洞的人。修复程序位于the API: $resource docs:
的顶部app.config(['$resourceProvider', function($resourceProvider) {
// Don't strip trailing slashes from calculated URLs
$resourceProvider.defaults.stripTrailingSlashes = false;
}]);