He estado intentando invocar D3 dentro de Node.js. He intentado en primer lugar a importar d3.v2.js del sitio web de D3 con la etiqueta script, pero después de leer este tema:¿Cómo usar D3 en Node.js correctamente?
I want to run d3 from a Cakefile
Cuando el autor del D3 informa uno debe 'NPM instalar d3' ... Hice esto y puedo invocar con éxito en la consola de nodo:
[email protected]:$ node
> var d3 = require("d3");
undefined
> d3.version;
'2.8.1'
Sin embargo, al intentar invocar desde app.js con 'nodo app.js', me sale:
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
I darse cuenta de que en otros lugares, autor de D3 ha especificado claramente que uno debe requerir el lienzo:
https://github.com/mbostock/d3/blob/master/examples/node-canvas/us-counties.js
como:
var Canvas = require("canvas");
pero incluso entonces, (e incluso si requiere específicamente index.js en lugar de d3 .v2.js en un comunicado requerir en app.js), no puede obtener el siguiente para trabajar dentro de una plantilla de 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
Gracias por su respuesta! Es bastante extraño: d3 está realmente en node_modules ya que lo instalé con 'npm install d3' ... pero un 'var d3 = require ("d3");' en app.js me da ese error BSON ... eliminar esa línea, error BSON ido. Y esto es con un ejemplo más simple de uso de d3, del dibujo del círculo de SVG aquí: http: // christopheviau.com/d3_tutorial/ – pland
Para el registro, descubrió que había problemas en el uso de globales entre mangosta y d3, por lo que llamar a d3 primero con var d3 = require ("d3"); antes de requerir mangosta resolvió el problema de error BSON. – pland
Esto se ha solucionado en BSON v0.1.5 (y mongodb v2.0.0, que depende de la versión correcta de BSON). –