我怎样才能将变量从ejs变为Node.js中的app.js?

时间:2017-03-21 06:21:24

标签: javascript json node.js ejs

我在node.js中很新手并试图将JSON数据从ejs传递到app.js 但我不知道如何从ejs传递到app.js。

我所做的是来自ejs的var stringify1 = <%- JSON.stringify(jsonfile_1) %>;

然后在用户点击“保存”按钮后,转到'/save' 然后我使用app.get,如下面的代码。

app.get('/save', isLoggedIn, function(req, res){
  console.log(stringify1);
});

以下是来自ejs的部分脚本代码,它生成json数据然后转到app.get('/save',..

    <script>
      function save(){
        var jsonfile_1 = {channel: {}};
        for (i = 0; i < jsonfile.channel.length; i++){
          var divData = document.getElementById(jsonfile.channel[i]);
          var mac_tmp = jsonfile.channel[i];
          if(divData.dataset.x != 0 && divData.dataset.y != 0){
            jsonfile_1.channel[mac_tmp] = [divData.dataset.x, divData.dataset.y];
          }
        }
        console.log(jsonfile_1.channel);
        console.log(JSON.stringify(jsonfile_1));
        var stringify1 = <%- JSON.stringify(jsonfile_1) %>;
        saveText(JSON.stringify(jsonfile_1.channel), "hello.json");
      }
    </script>

这是我的按钮代码

<a onclick= "save()" id="imageSave" href="/save">Save</a>

我试图在谷歌找到但却找不到我想要的解决方案。

任何人都可以对此有所了解吗?

提前致谢。

使用上面的代码,它给了我一个jsonfile_1未定义的错误。

修改

  <script>
  function save(){
    var jsonfile_1 = {channel: {}};
    for (i = 0; i < jsonfile.channel.length; i++){
      var divData = document.getElementById(jsonfile.channel[i]);
      var mac_tmp = jsonfile.channel[i];
      if(divData.dataset.x != 0 && divData.dataset.y != 0){
        jsonfile_1.channel[mac_tmp] = [divData.dataset.x, divData.dataset.y];
      }
    }
    console.log(jsonfile_1.channel);
    console.log(JSON.stringify(jsonfile_1));
    document.getElementById("jsonjson").value = JSON.stringify(jsonfile_1.channel);
    saveText(JSON.stringify(jsonfile_1.channel), "hello.json");
  }

  function saveText(text, filename){
    var a = document.createElement('a');
    a.setAttribute('href', 'data:text/plain;charset=utf-u,'+encodeURIComponent(text));
    a.setAttribute('download', filename);
    a.click()
  }
  </script>

保存按钮

<li><a onclick= "save()" id="imageSave" href="/save">Save</a></li>

app.js

app.get('/save', isLoggedIn, function(req, res){
  console.log(req.body.json1);
});

1 个答案:

答案 0 :(得分:2)

最好将json内容放在表单内的隐藏字段中,并在单击saveImage链接时提交表单。

<form action="/save" id="hdnJsonForm" method="POST">
    <input type="hidden" name="json1" id="jsonjson">
</form>

在javascript中,您必须在单击保存链接时提交表单。如果您使用的是JQuery,则可以实现此目的。

$(document).on('click','#imageSave',function(){
    $('#hdnJsonForm').submit();
 });

您接下来需要做的就是更改发布路线

app.post('/save', isLoggedIn, function(req, res){
  console.log(stringify1);
});

希望它有所帮助!!