将变量从Express传递到客户端JavaScript

将变量从Express传递到客户端JavaScript,javascript,node.js,express,d3.js,ejs,Javascript,Node.js,Express,D3.js,Ejs,最后,我尝试从节点服务器传递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)

最后,我尝试从节点服务器传递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> 
结果是

Holdings: undefined

有办法做到这一点吗?还是我完全搞错了?

您不能从客户端调用EJS变量,您必须将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> 

变量json_数据=
//在D3中使用上述变量
  • 现金:
  • 固定收益:
  • 权益:
  • 备选方案:

这可能的副本已关闭。为了让它工作,我不得不把它改成
@jtmcn-哦,对了,否则它会逃过引号
<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>