将Expressvariables传递给客户端JavaScript

最终,我试图从节点服务器传递JSON数据以供D3在客户端使用。

这是我的index.js

var express = require('express'); var router = express.Router(); var portmix = require('../data/holdings.json'); /* GET individual portfolio page. */ router.get('/portfolio/:portcode', function(req, res) { var porthold = []; for(var i in portmix){ if(portmix[i].PortfolioBaseCode === req.params.portcode){ porthold.push(portmix[i]) }} res.render('index', { pagetype: 'single_portfolio', holdings: porthold[0] }); }); module.exports = router; 

这是ejs文件:

 <div class="portfolio"> <h2><%= holdings.ReportHeading1 %></h2> <ul> <li>Cash: <%= holdings.CashMV %></li> <li>Fixed Income: <%= holdings.FixedMV %></li> <li>Equity: <%= holdings.EquityMV %></li> <li>Alternatives: <%= holdings.AltMV %></li> </ul> <div class="chart"> </div> </div> 

它用来显示“持有”值。 但是,如果我尝试从客户端js调用它使用:

 console.log("Holdings: " + holdings); 

结果是

 Holdings: undefined 

有没有办法做到这一点? 还是我所有的错误呢?

您不能从客户端调用EJSvariables,必须将JSON输出到页面,然后获取它

 <script type="text/javascript"> var json_data = <%- JSON.stringify( holdings ); %> // use the above variable in D3 </script> <div class="portfolio"> <h2><%= holdings.ReportHeading1 %></h2> <ul> <li>Cash: <%= holdings.CashMV %></li> <li>Fixed Income: <%= holdings.FixedMV %></li> <li>Equity: <%= holdings.EquityMV %></li> <li>Alternatives: <%= holdings.AltMV %></li> </ul> <div class="chart"> </div> </div>