我正试图从我的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);
});
我如何使这项工作?
答案 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
});
如果服务尚未完成,请不要忘记将服务注入控制器或应用程序文件中。