在express框架中使用angular.js $资源

我是Angular JS和node.js / express框架的新手。 我正在使用angular度和expression框架的小应用程序。 我有明确的应用程序与几个端点运行。 一个用于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数据库:

 ... 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的asynchronous特性,我仍然错过了某些东西或做错了什么。

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

这与angular $ resource的asynchronous性质有关。

 $scope.savedItems = storageService.savedItems(); 

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

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

就像一个快速的笔记。 您也可以观看savedItems。

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

我怀疑,节点没有返回MySQL结果。 事实上,它适用于静态文件,而不是为MySQL排除问题与angular。 你可以为http调用或chrome开发者日志添加萤火虫日志。 这可以让事情更清楚