将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>