web-dev-qa-db-fra.com

Comment résoudre TypeError: d3.time est indéfini?

Je veux analyser les données/le temps en utilisant D3.js. Pour cela, j'ai créé un fichier javascript et utilisé var d3 = require('d3'). J'installe D3 en utilisant npm install d3 et ai également essayé npm install d3 --save qui l'enregistre dans le fichier package.json

{
  "name": "school",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "browserify": "^13.1.0",
    "bufferutil": "^1.2.1",
    "d3": "^4.2.2",
    "express": "^4.14.0",
    "guid": "0.0.12",
    "gulp": "^3.9.1",
    "react": "^15.3.1",
    "react-dom": "^15.3.1",
    "reactify": "^1.1.1",
    "utf-8-validate": "^1.2.1",
    "vinyl-source-stream": "^1.1.0",
    "websocket": "^1.0.23",
    "ws": "^1.1.1"
  }
}

Cependant, je suis confronté à cette exception:

TypeError: d3.time is undefined

code du programme: 

'use strict';

var d3 = require("d3");
var latency_arr = [];
var time_arr = [];
var timeFormat = d3.time.format('%H:%M:%S %L');

module.exports = {
  histogram: function(data) {
    console.log(data);
    return {

      getBin: function() {

        var jsonObject = JSON.parse(data);
        this.time_arr = jsonObject.time;
        for(var i = 0 ; i < this.time_arr.length ; i++){
            temp_time = this.time_arr[i];
            this.time_arr[i] = new Date(timeFormat.parse(temp_time));
        }
        return this.time_arr;
      },

      addValue: function(date, value) {
        return true;
      },

      getValues: function() {
        if(data !== undefined){
            var jsonObject = JSON.parse(data);
            this.latency_arr = jsonObject.latency;
            return this.latency_arr;
        }
      }
    };
  }
};

Vérification:  

> var d3 = require('d3');
undefined

Mais le module d3 est dans le répertoire node_modules.

Pourquoi n'a-t-il pas reconnu le module d3? Qu'est-ce que je rate? 

9
kit

Vous avez besoin de D3 v4.2.2 qui ne possède plus la propriété d3.time, qui faisait partie de D3 v3. Selon le journal des changements, les formats time ont été soumis à l'aplatissement général de l'espace de noms et ont donc été renommés comme suit:

Cela dit, il reconnaît l’objet d3, alors que le d3.time est indéfini. Changer votre code pour 

var timeFormat = d3.timeFormat('%H:%M:%S %L');

devrait faire l'affaire.

31
altocumulus

Le module d3 est reconnu. Chaque affectation dans JS ne renvoie rien et donc exécute la ligne

var d3 = require('d3');

est tenu de renvoyer ... rien, d’où la undefined dans votre vérification (pour vous en assurer, tapez simplement var a = 0 dans votre console, vous obtiendrez également une réponse undefined). Il semble que la fonction ne soit pas définie dans le module, mais que le module ne soit pas chargé.

Vous devez vérifier l'API du module pour vous assurer que vous utilisez la bonne fonction.

L.E. en vous épargnant quelques ennuis, voici le lien

https://github.com/d3/d3/blob/master/API.md#time-formats-d3-time-format

0
Silviu Preda