在expressjs和JADE环境中可视化数据

时间:2014-02-24 22:19:24

标签: javascript node.js express mongoose pug

我正在尝试使用存储在MongoDB中的d3来显示某些数据。我的问题是通过JADE模板为每个数据创建div元素的最佳实践,然后调用方法绘制不同的图表。 我的主要问题是在显示HTML文件后我丢失了对数据的引用,我不想第二次查询数据库。

架构

# Create Schema
executionSchema = new Schema(
  timestamp: Number,
  components: [{
    uid: String,
    type: { type: String },
    samples: [Number],
    execution_times: [Number]
  }]
)

最初检索数据并将其提供给JADE模板:

指数咖啡

exports.index = (req, res) ->
    Execution.find (err, executions, count) ->
        res.render "index", title: "Debugger", executions: executions
        return
    return

Afterwads,index.JADE为执行内的每个divs创建component [0]

- each component in executions[0].components
    div(class="panel panel-primary")
      div(class="panel-heading") UID: #{component.uid}
      div(class="panel-body")
        p(style='white-space:pre;')
          | Type: #{component.type}
        - var uid = component.uid
        div(id=uid)

这就是现在的一切,因为我无法在JADE文件之外调用JavaScript方法。任何想法?
谢谢。

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您希望这些数据在客户端脚本上可用,而不是第二次实际查询数据库吗?

这里有两种选择。第一个是在你现在的Jade代码旁边添加这一行:

- each component in executions[0].components
    // div creation stuff here
    // ...

script
    window.executions = JSON.stringify(executions);

现在,您的客户端脚本将能够访问执行对象并访问这些数据:

var data = JSON.parse(executions);

不确定这是否有效。如果您不想第二次查询数据库,可能是因为数据集很大或db慢?

另外,使用单个数据库查询执行此操作的另一种方法是呈现没有div的页面,并且根本不查询数据库。然后使用Javascript获取执行(ajax调用),并在加载数据后将其呈现给客户端。

这取决于你的用例。