【问题标题】:AngularJS taking JSON from nodejs APIAngularJS 从 nodejs API 获取 JSON
【发布时间】:2016-06-01 00:41:43
【问题描述】:

我有一个奇怪的问题。 我的 nodejs api 适用于 mongodb。 Angular 正在通过 JSON 从 nodejs 请求数据。 我使用 Webstorm 11 来启动 Angular App。 所以,然后我用那个 JSON 做 ng-repeat 并得到这个:

    TypeError: Cannot read property '$id' of undefined
    at arguments.(anonymous function) (chrome-extension://ighdmehidhipcmcojjgiloacoafjmpfk/dist/hint.js:2001:19)
    at m.$digest (https://code.angularjs.org/1.5.0/angular.min.js:138:399)
    at m.scopePrototype.$digest (chrome-extension://ighdmehidhipcmcojjgiloacoafjmpfk/dist/hint.js:2016:23)
    at m.$apply (https://code.angularjs.org/1.5.0/angular.min.js:141:341)
    at m.scopePrototype.$apply (chrome-extension://ighdmehidhipcmcojjgiloacoafjmpfk/dist/hint.js:2079:22)
    at https://code.angularjs.org/1.5.0/angular.min.js:21:44
        at Object.invoke (https://code.angularjs.org/1.5.0/angular.min.js:41:295)
    at Ac.c (https://code.angularjs.org/1.5.0/angular.min.js:20:468)
    at Object.Ac.ia.resumeBootstrap (https://code.angularjs.org/1.5.0/angular.min.js:21:357)
    at maybeBootstrap (chrome-extension://ighdmehidhipcmcojjgiloacoafjmpfk/dist/hint.js:569:11)

还有这个:

    TypeError: Cannot read property '$id' of undefined
    at arguments.(anonymous function) (chrome-extension://ighdmehidhipcmcojjgiloacoafjmpfk/dist/hint.js:2001:19)
    at m.$digest (https://code.angularjs.org/1.5.0/angular.min.js:138:399)
    at m.scopePrototype.$digest (chrome-extension://ighdmehidhipcmcojjgiloacoafjmpfk/dist/hint.js:2016:23)
    at m.$apply (https://code.angularjs.org/1.5.0/angular.min.js:141:341)
    at m.scopePrototype.$apply (chrome-extension://ighdmehidhipcmcojjgiloacoafjmpfk/dist/hint.js:2079:22)
    at g (https://code.angularjs.org/1.5.0/angular.min.js:94:139)
    at t (https://code.angularjs.org/1.5.0/angular.min.js:98:260)
    at XMLHttpRequest.u.onload (https://code.angularjs.org/1.5.0/angular.min.js:99:297)

对于 ng-repeat 中的每个元素。 结果页面工作正常,但控制台中的此错误不好。

然后我尝试使用这个 JSON: https://s3.amazonaws.com/codecademy-content/courses/ltp4/forecast-api/forecast.json

使用此 JSON 不会引发任何错误.. 所以这就是我如何意识到我的 JSON 不够“好” :D 也许我需要放一些标题?在附图中,您可以比较我正在使用的 JSON。

附言一件更奇怪的事情:当我在没有 webstorm 的浏览器中执行我的 index.html 文件时(file:///Users/rustem/Dropbox/octomoney/index.html) - 控制台中没有发生错误并且应用程序运行良好!

JSON 的

    curl -i -X GET http://localhost:3000/getData?collection=expenses
    HTTP/1.1 200 OK
    X-Powered-By: Express
    Access-Control-Allow-Origin: *
    Content-Encoding: UTF-8
    Content-Type: application/json; charset=utf-8
    Content-Length: 1009
    ETag: W/"3f1-Y7uhK30COBeAh0OJQ4Upzg"
    Date: Fri, 19 Feb 2016 12:49:25 GMT
    Connection: keep-alive

    {"result":"1","message":"Request completed","data":[{"name":"Прочее","icon":"all_inclusive","color":"#b7cfd9","subCategories":"Ebay & Ali"},{"name":"Автомобиль","icon":"directions_car","color":"#63a3d2","subCategories":"Ремонт"}]}


    curl -i -X GET https://s3.amazonaws.com/codecademy-content/courses/ltp4/forecast-api/forecast.json
    HTTP/1.1 200 OK
    x-amz-id-2: I2wao57Or1Ib/0Ox9Bp/g5xNrlqqxbK/7kti+YjugN3974z1soOeOMhH+e5mw2Pz
    x-amz-request-id: 7B8334962BA70A53
    Date: Fri, 19 Feb 2016 12:44:56 GMT
    Expires: 0
    Content-Encoding: UTF-8
    Cache-Control: no-cache
    Last-Modified: Mon, 26 Jan 2015 16:20:44 GMT
    ETag: "f059fbba22678ca58a51d7b8d1e99061"
    Accept-Ranges: bytes
    Content-Type: application/json
    Content-Length: 946
    Server: AmazonS3

    {
    "city_name": "New York",
    "country": "US",
    "days": [
    {
    "datetime": 1420390800000,
    "icon": "https://s3.amazonaws.com/codecademy-content/courses/ltp4/forecast-api/sun.svg",
    "high": 68,
    "low": 37
    },
    {
    "datetime": 1420736400000,
    "icon": "https://s3.amazonaws.com/codecademy-content/courses/ltp4/forecast-api/sun.svg",
    "high": 59,
    "low": 32
    }

我如何使用 ng-repeat:

    <body ng-app="octomoney">
    <div>
        <div ng-controller="getExpensesController">
            <div ng-repeat="expense in expenses.data" align="center">
                <h4>{{ expense.name }}</h4>
            </div>
        </div>
    </div>

    <script src="https://code.angularjs.org/1.5.0/angular.min.js"></script>
    <script src="js/app.js"></script>
    <script src="js/controllers/mainController.js"></script>
    <script src="js/services/getExpensesService.js"></script>
    </body>

app.js

    var app = angular.module('octomoney', []);

ma​​inController.js

    app.controller('getExpensesController', ['$scope', 'getExpensesService', function ($scope, getExpensesService) {
        getExpensesService.success(function (data) {
            $scope.expenses = data;
        });
    }]);

getExpensesService.js

    app.factory('getExpensesService', ['$http', function ($http) {
        //return $http.get('https://s3.amazonaws.com/codecademy-content/courses/ltp4/forecast-api/forecast.json')
            return $http.get('http://localhost:3000/getData?collection=expenses&queryBuilder=1==1')
            .success(function (data) {
                return data;
            })
            .error(function (err) {
                return err;
            });
    }]);

【问题讨论】:

  • 我没有看到附件图片。将您的 HTML 链接到我们执行 ng-repeat 的位置,您的 json 文件的一部分以检查 dara 格式,以及您如何在控制器中加载它
  • 这个错误背后的原因是......你在 getExpensesController 中注入了 getExpensesService 但你没有在 angular.module('octomoney', []); 中添加 ExpensesService 模块;
  • @Banik 不,没有帮助。同样,使用另一个 JSON 可以正常工作(没有错误)。
  • @Waltrat,抱歉编辑问题。

标签: javascript angularjs json node.js


【解决方案1】:

发现是 AngularJS Batarnang 导致了这个问题。

详情请看:https://github.com/angular/batarang/issues/285

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-25
    • 2014-08-10
    • 1970-01-01
    • 2017-03-01
    • 2015-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多