在MEAN stack中使用angularjs工厂获取单个结果



我正试图从我的AngularJS工厂内的expressjs api中抓取单个结果。

工厂看起来像这样,并从我的api抓取所有帖子(写在expressjs和从mongodb获取数据),这是工作良好:

angular.module('bonsaiService', ['ngResource']).
factory('bonsaiService', function($q,$resource) {
    var bonsaiResource = $resource('http://localhost:8888/api/bonsais/:bonsaiId',{},{
        get:{
            method: 'GET',
            params:{bonsaiId:''},
            isArray: true
        }
    });
    return {
        get:function(){
            var q = $q.defer();
            bonsaiResource.get({
            },
            function(resp){
                q.resolve(resp);
            },function(httpResponse){
                q.reject(httpResponse);
            });
            return q.promise;
        }
        //find by id
    };
});

到目前为止,我所尝试的是在$resource url之后添加:bonsaiId,并为该id添加如下参数:params:{bonsaiId: "}.

服务器部分(expressJS)是这样的:

router.route('/bonsais/:bonsaiId')
.get(function(req,res){
        Bonsai.findOne(req.params.bonsaiId,function(err,bonsai){
            if(err)
                res.send(err);
            res.json(bonsai)
        })
    })

当我调用本地url(与现有的_id从mongodb)它工作正常,并返回我的数据json:

http://localhost:8888/api/bonsais/536be2e2ae54668818000001

现在在控制器我试图得到这个数据在我的范围,这是不工作。

    bonsaiService.get({bonsaiId:$routeParams.bonsaiId}).then(
    function(data){
        $scope.trees = data;
        console.log(data);
});

我如何使它工作?

您可以使用更简单的方法。

$resource的查询方法已经在数组上定义了一个GET,即QUERY

为什么不这样写你的服务:

.factory('bonsaiService', ['$resource',
    function($resource) {
        return $resource('http://localhost:8888/api/bonsais/:bonsaiId', {
            bonsaiId: '@bonsaiId'
        });
    }
])

在你的控制器中,它是这样工作的:

bonsaiService.query({
    bonsaiId: $routeParams.bonsaiId
}, function success() {
    //Your code
}, function err() {
    //Your code
});

不要忘记在控制器或应用文件中注入服务,如果还没有完成的话。

相关内容

  • 没有找到相关文章

最新更新