Javascript 使用AngularJS';用于查询数据库的s$资源

Javascript 使用AngularJS';用于查询数据库的s$资源,javascript,node.js,angularjs,Javascript,Node.js,Angularjs,我创建了一个通过url工作的API,它构建在node.js、express.js、mongoDB和angular.js上 我的API的调用方式如下: app.get('/api/posts/:query',api.postsQuery) 因此,如果我键入localhost:3000/api/posts/,mongoDB会将所有相关的JSON输出到我的浏览器中,这样就可以正常工作了 然而,我正试图将其与我的角度前端连接起来,这导致了一些问题。我希望用户能够搜索表单,并让我的数据库返回正确的记录。这

我创建了一个通过url工作的API,它构建在
node.js
express.js
mongoDB
angular.js

我的API的调用方式如下:

app.get('/api/posts/:query',api.postsQuery)

因此,如果我键入
localhost:3000/api/posts/
,mongoDB会将所有相关的JSON输出到我的浏览器中,这样就可以正常工作了

然而,我正试图将其与我的角度前端连接起来,这导致了一些问题。我希望用户能够搜索表单,并让我的数据库返回正确的记录。这是我的控制器:

function indexCtrl($scope, $http, $resource) {
  $scope.itemSearch = $resource('http://localhost\\:3000/api/posts/:query', 
    {query:''}, {get:{method:'JSONP'}});

  $scope.doSearch = function(){
    $scope.posts = $scope.itemSearch.get({query:$scope.searchTerm});
    console.log($scope.posts[1]) // returns undefined
  }
}
我的问题是,当我运行
$scope.doSearch
时,我在Chrome的资源面板中看到这样的查询:因此确实加载了正确的数据,但它没有将自身附加到
$scope.posts

我觉得这可能是因为我需要一个回调函数;我尝试使用
callback:JSON\u callback
,但这打乱了我的查询/API(因为它在
$resource
调用的末尾添加了一个
?callback=…
,从而中断了查询)


我可以在这里做些什么来让它工作吗?问题是缺少回调吗?也许我可以在
应用程序中添加一些正则表达式。get
调用,在
:query
之后,基于对文档的浏览(并且知道AngularJS通常异步执行所有操作),允许使用任何通配符

$scope.doSearch = function(){
    $scope.posts = $scope.itemSearch.get({query:$scope.searchTerm}, function(){
        console.log($scope.posts[1]) // hopefully is something
    });
  }
.$资源


由于事情是异步完成的(为了避免阻塞/等待/暂停),通常会有回调或承诺任何可能需要时间的事情(网络调用)。

基于对文档的浏览(并且知道AngularJS通常异步完成所有事情),下面的代码看起来应该可以工作

$scope.doSearch = function(){
    $scope.posts = $scope.itemSearch.get({query:$scope.searchTerm}, function(){
        console.log($scope.posts[1]) // hopefully is something
    });
  }
.$资源


由于事情是异步完成的(以避免阻塞/等待/暂停),因此通常会有回调或承诺任何可能需要时间的事情(网络调用)。

将回调添加到$resource调用中:

$scope.doSearch = function(){
    $scope.itemSearch.get({query:$scope.searchTerm}, function(data){
        $scope.posts = data.posts;
        console.log($scope.posts[1]);
    });
};
请注意,在中,它们使用回调:

var User = $resource('/user/:userId', {userId:'@id'});
User.get({userId:123}, function(u, getResponseHeaders){
    u.abc = true;
    u.$save(function(u, putResponseHeaders) {
    //u => saved user object
    //putResponseHeaders => $http header getter
    });
});

将回调添加到$resource调用:

$scope.doSearch = function(){
    $scope.itemSearch.get({query:$scope.searchTerm}, function(data){
        $scope.posts = data.posts;
        console.log($scope.posts[1]);
    });
};
请注意,在中,它们使用回调:

var User = $resource('/user/:userId', {userId:'@id'});
User.get({userId:123}, function(u, getResponseHeaders){
    u.abc = true;
    u.$save(function(u, putResponseHeaders) {
    //u => saved user object
    //putResponseHeaders => $http header getter
    });
});
解决这个问题的“有角度”的方法是使用for-promises

function indexCtrl($scope, $resource, $q) {
  var defer = $q.defer();

  var resource = $resource('http://localhost\\:3000/api/posts/:query', {query:''}, {get:{method:'JSONP'}});

  resource.get({query:'mySearchQuery'}, defer.resolve);

  defer.promise.then(function(data) {
    $scope.posts = data;
  });
}
解决这个问题的“有角度”的方法是使用for-promises

function indexCtrl($scope, $resource, $q) {
  var defer = $q.defer();

  var resource = $resource('http://localhost\\:3000/api/posts/:query', {query:''}, {get:{method:'JSONP'}});

  resource.get({query:'mySearchQuery'}, defer.resolve);

  defer.promise.then(function(data) {
    $scope.posts = data;
  });
}

虽然其他答案都有回调,但您的想法是等待回调,使
$scope.posts=data
正常工作。不过稍微更正一下,如果您查看我原始问题中的屏幕截图,post数据将在
data.posts
中返回,因此我需要使
$scope.posts=data.posts
正常工作。谢谢虽然其他答案都有回调,但您的想法是等待回调,使
$scope.posts=data
正常工作。不过稍微更正一下,如果您查看我原始问题中的屏幕截图,post数据将在
data.posts
中返回,因此我需要使
$scope.posts=data.posts
正常工作。谢谢