如何使用jade和express在脚本标记中动态生成javascript

如何使用jade和express在脚本标记中动态生成javascript,javascript,node.js,express,d3.js,pug,Javascript,Node.js,Express,D3.js,Pug,我试图为d3图形动态生成json数据。我不确定这是否是最佳策略,但我的尝试本质上是将d3代码放在脚本标记中,然后通过在express中传递的对象生成json 我遇到的问题是,我不确定如何在脚本标记中动态生成json数据。如果有更好的代码设计策略可以动态生成json对象,并将其传递给d3以使用jade/pug生成图表,请告诉我。下面的代码不起作用 代码如下: 玉码 //...content above, d3 to draw the graph below svg(height

我试图为d3图形动态生成json数据。我不确定这是否是最佳策略,但我的尝试本质上是将d3代码放在脚本标记中,然后通过在express中传递的对象生成json

我遇到的问题是,我不确定如何在脚本标记中动态生成json数据。如果有更好的代码设计策略可以动态生成json对象,并将其传递给d3以使用jade/pug生成图表,请告诉我。下面的代码不起作用

代码如下:

玉码

 //...content above, d3 to draw the graph below

        svg(height="800", width="1000").graph        
        script.
          var svg = d3.select("svg"),
          var data = #{dataObj}; // <--? how do I pass the json data object passed via route.js within the script tag?
Uncaught SyntaxError: Unexpected identifier
var data = [object Object];
控制台

 //...content above, d3 to draw the graph below

        svg(height="800", width="1000").graph        
        script.
          var svg = d3.select("svg"),
          var data = #{dataObj}; // <--? how do I pass the json data object passed via route.js within the script tag?
Uncaught SyntaxError: Unexpected identifier
var data = [object Object];

提前感谢您的帮助

您正在将一个对象传递到一个没有键的对象中


尝试
res.render('drawGraph',{dataObj:dataObj})

您正在将一个对象传递到一个没有键的对象中


尝试
res.render('drawGraph',{dataObj:dataObj})

如@Stretch0所述,您缺少对象的键

res.render('drawGraph', { dataObj: dataObj});
但单凭这一点并不能解决问题。您必须在pug模板中使用JSON.stringify来显示对象

res.render('drawGraph', { dataObj: dataObj});


`#{}转义字符,所以为了避免转义,可以使用!{}

就像@Stretch0提到的那样,您缺少对象的键

res.render('drawGraph', { dataObj: dataObj});
但单凭这一点并不能解决问题。您必须在pug模板中使用JSON.stringify来显示对象

res.render('drawGraph', { dataObj: dataObj});


`#{}转义字符,所以为了避免转义,可以使用!{}

感谢JSON.stringify的回答。请注意,在我使用的快速版本(最新版本)中,您不需要使用dataObj:dataObj。由于它们是相同的名称,我可以单独使用dataObj,并且它会传递。如果我想使用一个不同的名称,那么是的,我需要像myDataObj:dataObj或dataObj:{key:value}这样做。如果我传入一个之前声明过的对象,它工作正常,如问题中所述。感谢JSON.stringify的回答。请注意,在我使用的快速版本(最新版本)中,您不需要使用dataObj:dataObj。由于它们是相同的名称,我可以单独使用dataObj,并且它会传递。如果我想使用一个不同的名称,那么是的,我需要像myDataObj:dataObj或dataObj:{key:value}这样做。如果我传递了一个之前声明的对象,它可以正常工作,如问题中所述。