在MEAN堆栈中使用angularjs工厂获得单个结果

时间:2014-07-29 10:06:38

标签: angularjs mongodb express mean-stack

我正试图从我的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: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(使用mongodb中的现有_id)时,它工作正常并在json中返回我的数据:

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

现在在控制器中我试图在我的范围内获取这些数据,这是无效的。

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

        console.log(data);
});

我如何使这项工作?

1 个答案:

答案 0 :(得分:0)

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

query method for $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
});

如果服务尚未完成,请不要忘记将服务注入控制器或应用程序文件中。