角度资源 - $ resource:badcfg

时间:2015-03-06 22:23:10

标签: javascript angularjs node.js express resources

我的角度抛出了我

  

错误:[$ resource:badcfg]操作query的资源配置出错。预期的响应包含一个数组但得到一个对象

我不知道为什么会这样。我有一个学校的数据库,每个学校都有一个城市财产。我想要让一个城市里的所有学校都得到。 在服务器上,我的控制器有一个应该完全按照这个功能执行的功能:

getSchoolByData: function(req, res, next) {
    School.find({city: req.params.reqCity}).exec(function (err, collection) {
        if (err) {
            console.log("Could not load desired school: " + err);
        }
        res.send(collection);

    });
}

在我的客户端,我有一个资源和另一个控制器: 资源:

app.factory('SearchSchoolResource', function($resource) {
    var SearchSchoolResource = $resource('/schoolSearchResult/:reqCity', {city: 'reqCity'}, { update: {method: 'PUT', isArray: false}});
    return SearchSchoolResource;
}); 

控制器:

app.controller('SearchSchoolCtrl', function($scope, $routeParams, SearchSchoolResource) {
    $scope.schools = SearchSchoolResource.query({city: $routeParams.reqCity});
});

我不知道其中哪一个无法正常工作,我不知道如何检查。我是角度和节点的新手,我花了72个多小时,所以如果有人能告诉我如何解决这个问题,那将是惊人的! 除此之外,我设法归还了所有的学校,并且基于给定身份的单一学校就好了,但是基于城市的返校不合格。

编辑:

如果我只是将城市名称放在查找功能中,如

... find({city: 'name'}) ...

它有效,但是如果我使用req.params.reqCity则没有。我无法弄清楚为什么它不起作用,似乎req.params.reqCity返回的是不同的东西而不是给定的城市名称。尝试使用.ToArray而不是.exec,它不再工作。无法弄清楚req.params.reqCity返回什么,仍然无法弄清楚如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

尝试这种方式,它应该工作。除了让我也添加其他操作的语法。

服务:

 app.factory('SchoolService',function($resource){
            return $resource('/schoolSearchResult/:reqCity', 
            {
                reqCity: '@reqCity'
            },
            {
                'update': { method:'PUT' }
            },
            {
                'get': { method: 'GET', isArray: false }
            },
            {
                'delete': { method: 'DELETE'}
            }
        );
        });

控制器:

app.controller('SearchSchoolCtrl', function($scope, $routeParams, SchoolService) {
        var schoolService = new SchoolService();
        schoolService.$get({reqCity : $routeParams.reqCity},function(result){
                    $scope.schools = result;
                });
    });