Чтение данных CSV из NodeJS в AngularJS показывает только объект обещания с состоянием данных $$. Как получить доступ к этим данным? - PullRequest
0 голосов
/ 06 ноября 2019

Отказ от ответственности: Я программист на C и очень новичок в AngularJS (больше похоже на толчок в него), и я использую эту структуру кода из-за предыдущего парня. Кроме того, есть около миллиона подобных вопросов, но не совсем то, что у меня есть код. Итак, погружение в:

ЗАДАЧА: Мне нужно прочитать файл CSV, получить из него некоторые данные. В зависимости от значений поля, отобразите кнопку в HTML определенного цвета (то есть значение> 4, затем покажите зеленую кнопку, значение <4 покажите красную кнопку). </p>

Что я сделал: Итак, я прочитал CSV-файл с помощью fs в NodeJS, а затем получил данные в AngularJS с помощью Factory.

Проблема: В AngularJS я получаю объект обещания ([объект Object]в консоли). Мне нужно получить доступ к значениям, которые я вижу в этом объекте. Большую часть недели я потратил на изучение этого.

Бэкэнд-сервер - router.js

myRouter.route('/')

    .get(function (req, res) {
        var username = req.decoded.email;
        var csvDir = path.join(dataPath, 'mypath/' + username.substring(0, username.lastIndexOf("@")) + '.csv');

        console.log('file path in myRouter:', csvDir);

        fs.readFile(csvDir, 'utf8', function (err, data) {
            if (err) {
                return console.log(err);
            }
            console.log(data);
            res.json(data);
        });

    })

myFactory.js

'use strict';

angular.module('myApp')

  .factory('myFactory', ['$resource', 'baseURL', function ($resource, baseURL) {

    return $resource(baseURL + "myRouter/", null, null);

  }]);

AngularJS - контроллер. js

var initializeDisplay = function () {
    console.log('Searching CSV file');
    // TODO: http get request to read CSV file content 
    $scope.myData = FeatureFactory.get({}, function () {
         console.log($scope.myData);
     });

    // feedbackData.$promise.then(function (data) {
    //     console.log(data);
    // }, function (error) {
    //     console.error(data);
    // })
    console.log('Processing CSV file');

    updateDisplay(); // To display correct color button in HTML
};

Советы, решения приветствуются:)

T {0: "I", 1: "D", 2: ",", 3: "S", 4: "t", 5: "o", 6: "r", 7: "y", 8: ",", 9: "S", 10: "i", 11: "t", 12: "u", 13: "a", 14: "t", 15: "i", 16: "o", 17: "n", 18: ",", 19: "T", 20: "a", 21: "s", 22: "k", 23: " ", 24: "A", 25: "c", 26: "t", 27: "i", 28: "o", 29: "n", 30: ",", 31: "R", 32: "e", 33: "s", 34: "u", 35: "l", 36: "t", 37: ",", 38: "E", 39: "y", 40: "e", 41: " ", 42: "g", 43: "a", 44: "z", 45: "e", 46: ",", 47: "V", 48: "o", 49: "i", 50: "c", 51: "e", 52: " ", 53: "E", 54: "n", 55: "e", 56: "r", 57: "g", 58: "y", 59: ",", 60: "W", 61: "M", 62: "E", 63: "I", 64: "
", 65: "↵", 66: "1", 67: ",", 68: "1", 69: ",", 70: "4", 71: ",", 72: "3", 73: ",", 74: "2", 75: ",", 76: "1", 77: ",", 78: "2", 79: ",", 80: "3", $promise: c, $resolved: true}
0: "I"
1: "D"
2: ","
3: "S"
4: "t"
5: "o"
6: "r"
7: "y"
8: ","
9: "S"
10: "i"
11: "t"
12: "u"
13: "a"
14: "t"
15: "i"
16: "o"
17: "n"
18: ","
19: "T"
20: "a"
21: "s"
22: "k"
23: " "
24: "A"
25: "c"
26: "t"
27: "i"
28: "o"
29: "n"
30: ","
31: "R"
32: "e"
33: "s"
34: "u"
35: "l"
36: "t"
37: ","
38: "E"
39: "y"
40: "e"
41: " "
42: "g"
43: "a"
44: "z"
45: "e"
46: ","
47: "V"
48: "o"
49: "i"
50: "c"
51: "e"
52: " "
53: "E"
54: "n"
55: "e"
56: "r"
57: "g"
58: "y"
59: ","
60: "W"
61: "M"
62: "E"
63: "I"
64: ""
65: "↵"
66: "1"
67: ","
68: "1"
69: ","
70: "4"
71: ","
72: "3"
73: ","
74: "2"
75: ","
76: "1"
77: ","
78: "2"
79: ","
80: "3"
$promise: c {$$state: {…}}
$resolved: true
__proto__: Object

1 Ответ

0 голосов
/ 06 ноября 2019

Обычно AngularJS использует $ q провайдера для выполнения обещаний. Ожидается, что в ответе будет обещание Object, поскольку выборка данных из Node.JS является асинхронной операцией.

Ваша фабрика myFactory на самом деле использует $ resource provider, в документации AngularJS есть пример

var User = $resource('/users/:userId', {userId: '@id'});
User.get({userId: 123}).$promise.then(function(user) {
  user.abc = true;
  user.$save();
});

Подробнее на: https://docs.angularjs.org/api/ngResource/service/$resource

В вашем случае это должно быть:

var initializeDisplay = function () {
    console.log('Searching CSV file');
    // TODO: http get request to read CSV file content 
     FeatureFactory.get({}).$promise
    .then(function(data){
      $scope.myData=data;
     updateDisplay(); // To display correct color button in HTML
    });
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...