将nodejs/express应用程序中的json文件加载到d3中

问题描述:

我有一个快速应用程序,我想从文件夹public将json-data加载到d3(版本4)中。将nodejs/express应用程序中的json文件加载到d3中

我的文件夹结构如下所示:

public 
|-myData.json 
view 
|-index.jade 
app.js 

我想与D3加载JSON数据:

{ 
    { 
    "name": "Maria", 
    "age": 30 
    }, { 
    "name": "Fred", 
    "age": 50 
    }, { 
    "name": "Francis", 
    "age": 12 
    } 
} 

这是我index.jade文件:

extends layout 
block content 
    script(src='javascripts/jquery-3.1.1.min.js') 
    script(src='javascripts/d3.min.js') 
    script. 
    $(document).ready(function() { 
     d3.json("myData.json", function(data) { 
     console.log("d ", data); 
     }); 
    }); 

在app.js中,我说我想提供静态文件:

app.use(express.static(path.join(__dirname, 'public'))); 
app.use(express.static('public')); 

在它总是说控制台:d null

更新: 我现在改变了路径

"d3.json("../myData.json", function(data)" 

展望网络选项卡上,我可以看到它加载的文件成功。但在控制台它仍然会打印“null

更新2: 这是因为我的JSON - 数据无效。 ^^

{ 
    "content": [ 

     { 
      "name": "Maria", 
      "age": 30 
     }, { 
      "name": "Fred", 
      "age": 50 
     }, { 
      "name": "Francis", 
      "age": 12 
     } 
    ] 
} 
+0

你在网络标签中看到什么? – SLaks

+0

“myData.json xhr \t d3.min.js:6 \t 1.2 KB \t 40 ms \t”。它不能被加载。它没有被发现。我在Chrome上激活了CORS。 @SLaks – thadeuszlay

确保您指向public文件夹中的d3.json的第一个参数就到表达的是静态托管的文件。

... 
d3.json("../myData.json", function(data) { 
     console.log("d ", data); 
     }); 
    }); 

更新:修改了解决目录参考的答案。另外请确保myData.json是一个有效的json文件! :)

+0

我也试过。但事实并非如此。如果我这样做,它会在控制台中说:“d3.min.js:6 GET http:// localhost:3000/public/myData.json 404” – thadeuszlay

+0

啊,也许是这行'app.use(express .static(path.join(__ dirname,'public'))); (express.static('public'));' 尝试将其更改为'app.use(express.static(path.join(__ dirname,'public'),{index:'index.jade'}} ));' – Oberon

+0

没有。在它已经调用index.jade之前。所以,它也可以在之前找到它。它也可以加载json文件。但不知何故d3没有注意到它。 :/ – thadeuszlay