Tôi đã cố gắng gọi D3 trong Node.js. Tôi cố gắng trước hết phải nhập khẩu d3.v2.js từ website D3 với thẻ kịch bản, nhưng sau đó đọc chủ đề này:Làm thế nào để sử dụng D3 trong Node.js đúng cách?
I want to run d3 from a Cakefile
đâu tác giả D3 của khuyên ta nên 'NPM cài đặt d3' ... Tôi đã làm điều này , và tôi thành công có thể gọi nó ở nút điều khiển:
[email protected]:$ node
> var d3 = require("d3");
undefined
> d3.version;
'2.8.1'
Tuy nhiên, khi cố gắng gọi nó từ app.js với 'nút app.js', tôi nhận được:
node.js:201
throw e; // process.nextTick error, or 'error' event on first tick
^
TypeError: Cannot read property 'BSON' of undefined
at /Users/dpc/Dropbox/sync/Business/MindfulSound/Development/nad.am/nadam/node_modules/mongoose/node_modules/mongodb/lib/mongodb/index.js:45:44
tôi nhận ra rằng ở những nơi khác, tác giả D3 đã quy định rõ ràng rằng ta nên yêu cầu vải:
https://github.com/mbostock/d3/blob/master/examples/node-canvas/us-counties.js
như:
var Canvas = require("canvas");
nhưng thậm chí sau đó, (và thậm chí nếu cần đặc biệt index.js thay vì d3 .v2.js trong một tuyên bố yêu cầu trong app.js), tôi không thể có được bên dưới để làm việc trong một mẫu Jade:
- script('/javascripts/d3.v2.js')
h1 Dashboard
section.css-table
section.two-column
section.cell
hr.grey
h2 Statistics
#mainGraph
script(type="text/javascript")
var Canvas = require("canvas");
var w = 400,
h = 400,
r = Math.min(w, h)/2,
data = d3.range(10).map(Math.random).sort(d3.descending),
color = d3.scale.category20(),
arc = d3.svg.arc().outerRadius(r),
donut = d3.layout.pie();
var vis = d3.select("body").append("svg")
.data([data])
.attr("width", w)
.attr("height", h);
var arcs = vis.selectAll("g.arc")
.data(donut)
.enter().append("g")
.attr("class", "arc")
.attr("transform", "translate(" + r + "," + r + ")");
var paths = arcs.append("path")
.attr("fill", function(d, i) { return color(i); });
paths.transition()
.ease("bounce")
.duration(2000)
.attrTween("d", tweenPie);
paths.transition()
.ease("elastic")
.delay(function(d, i) { return 2000 + i * 50; })
.duration(750)
.attrTween("d", tweenDonut);
function tweenPie(b) {
b.innerRadius = 0;
var i = d3.interpolate({startAngle: 0, endAngle: 0}, b);
return function(t) {
return arc(i(t));
};
}
function tweenDonut(b) {
b.innerRadius = r * .6;
var i = d3.interpolate({innerRadius: 0}, b);
return function(t) {
return arc(i(t));
};
section.cell
hr.grey
h2 Achievements
Cảm ơn trả lời của bạn! Nó khá lạ: d3 thực sự là trong node_modules khi tôi cài đặt nó với 'npm install d3' ... nhưng một 'var d3 = require ("d3");' trong app.js cho tôi biết rằng lỗi BSON ... loại bỏ dòng đó, lỗi BSON đã biến mất. Và đây là một ví dụ đơn giản về sử dụng d3, từ vòng tròn SVG vẽ ở đây: http: // christopheviau.com/d3_tutorial/ – pland
Đối với hồ sơ, đã tìm ra rằng có vấn đề trong việc sử dụng các globals giữa mongoose và d3, để gọi d3 đầu tiên với var d3 = require ("d3"); trước khi yêu cầu mongoose giải quyết vấn đề lỗi BSON. – pland
Điều này đã được sửa trong BSON v0.1.5 (và mongodb v2.0.0, phụ thuộc vào phiên bản BSON chính xác). –