2

我是 Angular JS 和 node.js/express 框架的新手。我正在开发一个使用 angular 和 express 框架的小型应用程序。我有几个端点运行的快速应用程序。一个用于 POST 操作,一个用于 GET 操作。我正在使用 node-mysql 模块来存储和从 mysql 数据库中获取。

这个应用程序正在我的笔记本电脑上运行。

angular.js 客户端:

控制器

function ItemController($scope, storageService) {
   $scope.savedItems = storageService.savedItems();
   alert($scope.savedItems);
}

服务

myApp.service('storageService', function($resource) {

    var Item = $resource('http://localhost\\:3000/item/:id',
      {
         id:'@id',
      },

      {
         query: {
            method: 'GET',
            isArray: true
      }
    );

    this.savedItems = function() {
      Item.query(function(data){
      //alert(data);
          return data;
       });
    }

带有 mysql 数据库的 Express 服务器:

...
app.get('/item', item.list);
...

items.js
---------
exports.list = function(req, res) {

   var sql = 'select * from item';

   connect: function() {
      var mysql = require('mysql');
      var connection = mysql.createConnection({
        host     : 'localhost',
        user     : 'admin',
        database : 'test'
      });
      return connection;
   },

   query: function(sql) {
      var connection = this.connect();
      return connection.query(sql, function(err, results) {
         if (err) throw err;
         return results;
      });
   },
   res.send(results);
};

当我从服务器发送静态项目数组(json)时, $scope.savedItems() 正在被填充。

但是当我访问数据库中的项目时,即使服务器正在返回项目,客户端中的 $scope.savedItems 也是空的。直接使用 $http 也无济于事。

我从 angular.js 文档中阅读了 $resource 和 $http 的异步性质,但我仍然遗漏了什么或做错了什么。

在此先感谢并感谢您的帮助。

4

3 回答 3

2

这与角度 $resource 的异步性质有关。

$scope.savedItems = storageService.savedItems();

立即返回一个空数组,该数组在数据返回后填充。因此,您alert($scope.savedItems);将只显示一个空数组。$scope.savedItems如果你稍后再看你的,你会发现它已经被填充了。如果您想在数据返回后立即使用数据,可以使用回调:

$scope.savedItems = storageService.savedItems(function(result) {alert(result); });
于 2013-02-28T07:46:31.257 回答
1

就像一个快速说明。您还可以观看已保存的项目。

function ItemController($scope, storageService) {
   $scope.savedItems = storageService.savedItems();
   $scope.$watch(function() {
      return $scope.savedItems;
   }, function(newValue, oldValue) {
      if (typeof newValue !== 'undefined') {
         // Do something cool
      }
   },
   true);
}
于 2013-02-28T10:39:05.040 回答
0

我怀疑,节点没有返回 mysql 结果。它适用于静态文件而不适用于 mysql 的事实排除了角度问题。您可以为 http 调用或 chrome 开发人员日志添加 firebug 日志吗?这可以更清楚地说明问题

于 2013-10-17T06:09:41.687 回答