【问题标题】:Getting a single result with angularjs factory in MEAN stack在 MEAN 堆栈中使用 angularjs 工厂获得单个结果
【发布时间】:2018-11-10 01:24:45
【问题描述】:

我正在尝试从我的 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);
});

我该如何进行这项工作?

【问题讨论】:

  • 调用服务时控制台会发生什么?此外,您是否在控制器中(或通过配置在整个应用程序中)注入了服务?
  • 我得到了 mongodb 中所有条目的结果...

标签: angularjs mongodb express mean-stack


【解决方案1】:

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

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
});

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

【讨论】:

  • 感谢您的回复。我以前实际上使用过这种方法,但它会引起问题。我当前的方法在提供所有结果列表时有效,只需修改它以提供特定结果。
  • 我在尝试您的代码时会收到此错误。错误:[$resource:badcfg] 数组我之前已经要求解决此问题并使用上述方法,该方法适用于返回所有结果。
猜你喜欢
  • 2016-11-27
  • 2017-06-30
  • 1970-01-01
  • 2018-05-19
  • 1970-01-01
  • 2016-07-12
  • 2020-12-29
  • 1970-01-01
  • 2015-03-17
相关资源
最近更新 更多