Jaroslav Klimčík
Jaroslav Klimčík

Reputation: 4808

Expected response to contain an object but got an array for GET action

I'm getting this error "Error: [$resource:badcfg] Error in resource configuration for action 'get'. Expected response to contain an object but got an array"

and I don't know how to fix it. I have this service

angular.module('messages').factory('Messages', ['$resource',
    function ($resource) {
        return $resource('api/messages/:username', {
            username: '@username'
        });
    }]);

and this in controller:

    $scope.findOne = function () {
        $scope.messages = Messages.get({
            username: $routeParams.username
        });

        console.log($scope.messages);
    };

For this route I have in API controller this

exports.read = function (req, res) {
    res.json(req.message);
};

I know that I have to use $resource action isArray = true, but I don't know where to put it. I tried to do something like this:

angular.module('messages').factory('Messages', ['$resource',
    function ($resource) {
        return $resource('api/messages/:username', {
            username: '@username'
        }, 
            {'query': {method: 'GET', isArray: true}});
    }]);

but without result and still same error.

Upvotes: 2

Views: 4772

Answers (3)

Saulo Lozano
Saulo Lozano

Reputation: 256

What you did is correct, but you have the use the method you just created ('query'), so the call would look like this:

$scope.findOne = function () {
    Messages.query({
        username: $routeParams.username
    }).$promise.then(function (response) {
        $scope.messages = response;
        console.log($scope.messages);
    });

};

Upvotes: 1

Calden
Calden

Reputation: 76

Use Messages.query(...) instead of method get()

Upvotes: 3

petur
petur

Reputation: 1386

In your controller:

$scope.findOne = function () {
        $scope.messages = Messages.query({
            username: $routeParams.username
        });

        console.log($scope.messages);
    };

query Instead of get, should solve it.

Upvotes: 4

Related Questions