我的AngularJS应用程序出了问题。我为简单的GET和POST函数构建了一个Node.js RESTful API。如果我使用测试客户端发送http请求,一切正常,我得到了我的数据。 但是,如果我尝试在angular-js应用程序中使用相同的请求,则会出现错误,我不知道为什么。
这是我的node.js应用程序的代码
www.js:
var app = require('../app');
var http = require('http');
var port = '3000';
app.set('port', port);
var server = http.createServer(app);
server.listen(port);
app.js:
var express = require('express');
var bodyParser = require('body-parser');
var routes = require('./routes/index');
var users = require('./routes/users');
var app = express();
app.use(bodyParser.json());
app.use('/api/v1/', routes);
app.use('/api/v1/users', users);
users.js:
router.get('/', function (req, res, next) {
db_pool.getConnection(function (err, conn) {
if (err) {
conn.release();
res.json({"code": 100, "status": "Error in connection database"});
return;
}
console.log('connected as id ' + conn.threadId);
conn.query("select * from Users", function (err, rows) {
conn.release();
if (!err) {
res.setHeader('content-type', 'application/json');
res.json(rows); // fetch rows
} else {
res.json({"code": 404, "status": "No Users available"});
}
});
conn.on('error', function (err) {
res.json({"code": 100, "status": "Error in connection database"});
return;
});
});
});
这是我的Angular-JS代码: app.js:
'use strict';
angular.module('tutorialApp', [])
.controller('UsersCtrl', function($scope, $http){
$http.get('http://localhost:3000/api/v1/users').success(function(usersResponse) {
$scope.users = usersResponse.data;
}).error(function (response, status, header, config) {
alert("ouh, an error...");
});
});
和HTML-Site:
<script src="../js/angular.min.js"></script>
<script src="../js/modules/app.js"></script>
<div class="container">
<input type="text" ng-model="search">
<p ng-show="search">You searching for: {{search}}</p>
<table class="table" ng-controller="UsersCtrl">
<tr ng-repeat="user in users | filter:search">
<td>{{user.user_id}}</td>
<td>{{user.first_name}}</td>
<td>{{user.last_name}}</td>
</tr>
</table>
</div>
我错了什么?
答案 0 :(得分:1)
您的问题可能是由于以下弃用:
$ http遗留承诺方法成功与错误 弃用。请改用标准方法。如果 $ httpProvider.useLegacyPromiseExtensions设置为false然后这些 方法将抛出$ http / legacy错误。
通过https://docs.angularjs.org/api/ng/service/$http
当它是同一个主机时,尝试使用更多简化的代码与成功/失败回调和相对URL:
$http.get('/someUrl', config).then(successCallback, errorCallback);
您的代码看起来像:
$http.get('/someUrl', config).then(
function(usersResponse) { $scope.users = usersResponse.data;},
function (res) { alert("ouh, an error..."); }
);
另外,我强烈推荐Restangular,我觉得它比单独的$ http更容易和有效。它建立在$ http之上,只是一个更加上下文和用户友好的设置。
答案 1 :(得分:0)
好的,在我使用node.js提供角度页面并将URL缩减为相对URL后,一切正常。谢谢你的帮助。
现在我的UsersCtrl看起来像:
'use strict';
angular.module('tutorialApp', [])
.controller('UsersCtrl', function($scope, $http){
$http.get('/api/v1/users').then(function(usersResponse) {
$scope.users = usersResponse.data;
})
});