我正试图从我的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
});
不要忘记在控制器或应用文件中注入服务,如果还没有完成的话。