当前位置: 首页 > 面试题库 >

如何在Node.js中正确使用D3?

陶高峯
2023-03-14
问题内容

我一直在尝试在Node.js中调用D3。我首先尝试使用脚本标签从D3的网站导入d3.v2.js

D3的作者建议一个人应该“ npm install d3” …我做到了,我可以在节点控制台中成功调用它:

dpc@ananda:$ node
> var d3 = require("d3");
undefined
> d3.version;
'2.8.1'

但是,当尝试使用“ node app.js”从app.js调用它时,我得到:

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

我意识到,D3的作者在其他地方已经明确规定了应该使用画布:

https://github.com/mbostock/d3/blob/master/examples/node-canvas/us-
counties.js

如:

var Canvas = require("canvas");

但是即使如此,(即使在app.js的require语句中特别要求使用index.js而不是d3.v2.js),我也无法在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

问题答案:

在Node中使用D3的正确方法是使用NPM安装d3,然后再安装到require它。您可以npm install d3使用
package.json 文件,也可以使用npm install

{
  "name": "my-awesome-package",
  "version": "0.0.1",
  "dependencies": {
    "d3": "3"
  }
}

将d3放入node_modules目录后,可通过 require 加载它:

var d3 = require("d3");

就是这样。

关于您的其他问题:不需要使用D3画布。链接的节点画布示例需要画布,因为它渲染为画布。TypeError(无法读取未定义的属性“
BSON”,未定义)似乎与您使用猫鼬/ monogdb有关,与D3无关。



 类似资料:
  • 问题内容: 我是node.js的新手,并表示自己,并且已经尝试了一段时间。现在,我对与解析请求正文有关的快速框架的设计感到困惑。来自快递的官方指南: 设置完所有中间件之后,然后添加要处理的路由: 这种方法的问题在于,在检查路由有效性之前,将首先解析所有请求正文。解析无效请求的主体似乎效率很低。甚至更多,如果我们启用上传处理: 任何客户端都可以通过上传任何文件来轰炸服务器(通过向任何路由/路径发送请

  • 问题内容: 从官方教程中: 在卸载和销毁组件之前立即调用。使用此方法执行任何必要的清除,例如使计时器无效,取消网络请求或清除在其中创建的所有DOM元素。 我了解“使计时器无效”。可以用终止。但是我不理解“清理在中创建的任何DOM元素”,我可以看到这种情况的示例吗? 问题答案: 如果网络请求发送库支持中止正在进行的网络请求调用,则绝对可以在方法中调用该请求。 但是,与清理元素有关。根据目前的经验,我

  • 现在,越来越多的科技公司和开发者开始使用 Node.js 开发各种应用。Node.js除了能够辅助大前端开发外,还可以编写Web应用,封装Api,组装RPC服务等,甚至是开发 VSCode 编辑器一样的PC客户端。和其它技术相比, Node.js 简单易学,性能好、部署容易,能够轻松处理高并发场景下的大量服务器请求。Node.js 周边的生态也非常强大,NPM(Node包管理)上有超过60万个模块

  • 问题内容: 我读了这篇文章《如何真正地,真正地使用QThreads》。完整说明,它说而不是子类qthread和重新实现run(),应使用moveToThread(QThread *)使用moveToThread将QObject推送到QThread实例上 这是C ++示例,但我不知道如何将其转换为python代码。 我一直在使用这种方法来生成qthread,但是如您所见,它使用的是不推荐的方式。我如

  • 问题内容: 这是一个演示查询,请注意,这非常简单,仅在base_price为0的地方获取,并且仍然选择条件3: 是 在数据库上运行此命令时,我得到: 3 0 3 0 3 0 3 0 3 0 问题答案: 删除后立即: 有两种不同的形式,如手册中所述。在这里,您要使用第二种形式,因为您正在使用 搜索条件 。

  • 本文向大家介绍如何在MySQL中正确使用WITH ROLLUP?,包括了如何在MySQL中正确使用WITH ROLLUP?的使用技巧和注意事项,需要的朋友参考一下 使用WITH ROLLUP的语法如下- 让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 这将产生以下输出- 这是在MySQL中正确使用WITH ROLLUP的查询- 这将产生以下输出-