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?
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:
- d3.time.format ↦ d3.timeFormat
- d3.time.format.utc ↦ d3.utcFormat
- d3.time.format.iso d3.isoFormat
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.
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