是否可以将ejs变量传递给嵌入式JavaScript文件

时间:2017-10-04 18:00:14

标签: javascript node.js ejs

我有四个文件,我正在为这个项目使用节点。 我有 index.ejs app.js countymap.js countries.geo.json

app.js使用国家代码数组(即[“MEX”,“USA”])呈现index.ejs文件。然后index.ejs调用countrymap.js使用d3在国家/地区使用json渲染地图.geo.json。

我希望能够做的是将国家/地区代码传递给index.ejs,并使用它们根据countries.geo.json文件为具有相应国家/地区代码的国家/地区着色。到目前为止,我已经尝试了几种方法,似乎没有一种方法可行。

如果有人有任何想法,我真的可以使用帮助。这是我最后的投资组合和平,我陷入了第一道障碍。此外,如果你认为我错了并且有其他解决办法,我也很乐意听到。

谢谢, 乔治

index.ejs

 <!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <title>Passport Social</title>

    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
    <script type="text/javascript" src="https://d3js.org/d3.v3.min.js"></script>
    <script type="text/javascript" src="https://d3js.org/topojson.v2.min.js"></script>

</head>

<body>
    <div class="container">
        <div class="row">
            <div class="col-md-3">
                <div class="list-group">
                    <li class="list-group-item active">Info 1</li>
                    <li class="list-group-item">Info 2</li>
                    <li class="list-group-item">Info 3</li>
                </div>
            </div>
            <div class="col-md-9">
                <div class="thumbnail">
                    <svg style="background:grey;"></svg>
                </div>
            </div>
        </div>
    </div>

    <script src="js/countrymap.js" type="text/javascript"></script>



</body>


</html>

app.js

var express     = require("express"),
    app         = express(),
    bodyParser  = require("body-parser");


var countrydata = ["MEX","USA"];

app.get("/", function(req, res){
    res.render("index",{countries:countrydata});
});

app.use(bodyParser.urlencoded({extended:true}));
app.set("view engine","ejs");
app.use(express.static(__dirname+"/public"));


app.listen(process.env.PORT,process.env.IP,function(){
    console.log("Passport Social Server is Running.")
})

countrymap.js

/*global d3*/

var w = 500,
    h = 300;

var projection = d3.geo.mercator()
        .scale(1)
        .translate([0, 0]);
var path = d3.geo.path()
        .projection(projection);

var svg = d3.select("svg")
    .attr("width", w)
    .attr("height", h);

d3.json("json/countries.geo.json", function(error, world) {
  if (error) return console.log(error);
  world.features.forEach(function(path){
  })

  var b = path.bounds(world),
      s = .95 / Math.max((b[1][0] - b[0][0]) / w, (b[1][1] - b[0][1]) / h),
      t = [(w - s * (b[1][0] + b[0][0])) / 2, (h - s * (b[1][1] + b[0][1])) / 2];
  projection.scale(s)
      .translate(t);

  svg.selectAll("path")
      .data(world.features).enter()
      .append("path")
      //.style("fill", "black")
      .style("stroke", "grey")
      .style("stroke-width", "1px")
      .attr("d", path)
      .attr("id", function(d, i) {return (d.id);});

});

1 个答案:

答案 0 :(得分:1)

index.ejs文件正上方<script src="js/countrymap.js" type="text/javascript"></script>文件中声明一个变量 例如:

<script type="text/javascript">
    var get_countries = <% countries %>
</script>
<script src="js/countrymap.js" type="text/javascript"></script>

然后在get_countries文件中使用javascript变量countrymap.js