"Error: [$resource:badcfg] Error in resource configuration for action `get`. Expected response to contain an object but got an array

"Error: [$resource:badcfg] Error in resource configuration for action `get`. Expected response to contain an object but got an array

我尝试查找具有指定 contactPersonId 的联系人。

查找联系人的有效状态是:

.state("contactDetail", {
    url: "/contacts/:id",
    templateUrl: "app/contacts/contactDetailView.html",
    controller: "ContactDetailController as viewModel",
    resolve: {
        contactResource: "contactResource",
        contact: function(contactResource, $stateParams){
            var id = $stateParams.id;
            return contactResource.get({id: id}).$promise;
        }
    }
})

现在,当我尝试对其中具有特定 ID 的联系人的联系人进行更高级的搜索时,我尝试使用此:

.state("contactPersonDetail", {
    url: "/contactPerson/:id",
    templateUrl: "app/contacts/contactPersonDetailView.html",
    controller: "ContactPersonDetailController as viewModel",
    resolve: {
        contactResource: "contactResource",
        contactPersoon: function(contactResource, $stateParams){
            var id = $stateParams.id;
            var contacts = contactResource.get();
            var contact;
            for(var i = 0; i < contacts.length; i++){
                if(contacts[i].contactPerson.id == id){
                    contact = contacts[i].contactPerson;
                    break;
                }
            }
            return contact.$promise;

        }
    }
})

当我点击联系人查看其详细信息时,出现此错误:

"Error: [$resource:badcfg] Error in resource configuration for action get. Expected response to contain an object but got an array (Request: GET http://--url--/api/contacts/)

我的问题是: 我什至有可能尝试这样做吗? 如果是,有什么问题? 如果不是,应该怎么办?

$resource 的文档中,请参阅操作下的这一行:

isArray – {boolean=} – If true then the returned object for this action is an array, see returns section.

基本上,您需要指定您的后端是要return一个对象还是一个数组,以便它知道如何处理数据。


更新:重新阅读您的评论后,您似乎误解了 get() 在提供 id 与不提供 id 时的作用。

在没有看到您的 url 的情况下,我假设您正在调用您的后端:

http://--url--/api/contacts/

&

http://--url--/api/contacts/<contact_id>

很可能第一个 url return 是一个包含 所有 联系人的数组(因此您可以遍历结果)。其中第二个 url 将只是 return 一个联系人对象。

这就是为什么对于其中一个调用,您需要指定 isArray: true