AngularJS $ http.get不能用于node.js RESTful

时间:2015-11-30 20:06:59

标签: javascript angularjs node.js rest

我的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>

我错了什么?

2 个答案:

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