2016-09-07 20 views
8

Tôi muốn phân tích cú pháp dữ liệu/thời gian bằng D3.js. Vì mục đích đó, tôi đã tạo một tệp javascript và sử dụng var d3 = require('d3'). tôi cài đặt D3 sử dụng npm install d3, và cũng đã cố gắng npm install d3 --save đó lưu nó trong package.json file:Làm thế nào để giải quyết TypeError: d3.time là không xác định?

{ 
    "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" 
    } 
} 

Tuy nhiên, tôi đang phải đối mặt với ngoại lệ này:

TypeError: d3.time is undefined 

mã chương trình:

'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; 
     } 
     } 
    }; 
    } 
}; 

Kiểm tra:

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

Nhưng mô-đun d3 nằm trong thư mục node_modules.

Tại sao nó không nhận ra mô-đun d3? Tôi đang thiếu gì?

Trả lời

21

Bạn đang yêu cầu D3 v4.2.2 không còn thuộc tính d3.time nữa, là một phần của D3 v3. Theo changelog các time formats đã chịu sự làm phẳng namespace nói chung và do đó được đổi tên như sau:

Điều đó nói rằng, nó không nhận ra đối tượng d3, wheras các d3.time là undefined. Thay đổi mã của bạn thành

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

nên thực hiện thủ thuật.

+2

@ altocumulus- ok hiểu rồi. Làm thế nào tôi có thể sử dụng ** d3.time.scale() ** và ** d3.scale.linear() **? – kit

+2

Tất cả đều nằm trong liên kết thay đổi trong câu trả lời. d3.time.scale -> d3.scaleTime và d3.scale.linear -> d3.scaleLinear – odedfos

0

Mô-đun d3 được nhận dạng. Mỗi nhiệm vụ trong JS trả gì cả, do đó thực hiện các dòng

var d3 = require('d3'); 

chắc chắn sẽ quay trở lại ... không có gì, vì thế mà undefined trong kiểm tra của bạn (Để đảm bảo, chỉ cần gõ var a = 0 trong giao diện điều khiển của bạn, bạn cũng sẽ nhận được một undefined phản hồi). Có vẻ như hàm không được định nghĩa trong mô đun, thay vào đó mô-đun không được tải.

Bạn nên kiểm tra API của mô-đun, để đảm bảo bạn đang sử dụng đúng chức năng.

L.E. tiết kiệm cho bạn một số rắc rối, đây là liên kết

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

Các vấn đề liên quan