访问Javascript文件中传递的EJS变量

访问Javascript文件中传递的EJS变量,javascript,node.js,express,Javascript,Node.js,Express,RESTful路由js文件: // index route - show all todos router.get("/", middleware.isLoggedIn,function(req,res) { Todo.find({ "author.id" : req.user._id}, function(err, allTodos) { if(err) { console.log(err); } else { res.render("todo/in

RESTful路由js文件:

// index route - show all todos
router.get("/", middleware.isLoggedIn,function(req,res) {
  Todo.find({ "author.id" : req.user._id}, function(err, allTodos) {
    if(err) {
      console.log(err);
    } else {
      res.render("todo/index", {todos: allTodos});
    }
  });        
});
我的index.ejs文件具有:

<script src="/scripts/todoCalendar.js"></script>
但是当我尝试在todoCalendar.js文件中执行
console.log(x)
时,它说
x
是未定义的

非常感谢您的帮助。


  • 解决问题的三种方法

  • 变体

    <script>
        var x = "<%= todos %>";
        console.log(x); 
    </script>
    
    <script>
        var x = "<%- todos %>";
        console.log(x); 
    </script>
    
    
    var x=“”;
    控制台日志(x);
    
  • 变体

    <script>
        var x = "<%= todos %>";
        console.log(x); 
    </script>
    
    <script>
        var x = "<%- todos %>";
        console.log(x); 
    </script>
    
    
    var x=“”;
    控制台日志(x);
    
  • 变体[XD]

    HTML:

    Javascript:

    <script>
        var x = document.getElementById("yy").innerText;
        console.log(x); 
    </script>
    
    
    var x=document.getElementById(“yy”).innerText;
    控制台日志(x);
    

  • 通过格式化从服务器获得的JSON的html打印,并使用javascript(my case jQuery)检索文本、存储文本并将其从html中删除:)

    EJS:


    恐怕您不能在扩展名为.js的文件中使用EJS标记

    如果将js代码放在EJS文档的底部,那么就没有问题了

    在后端,您可以执行以下操作:

    res.render('todo/index', {todos: JSON.stringify(alltodos)}); 
    
    在ejs文件中,您可以执行以下操作:

    <script>
     var x= <%- todos %>;
     console.log(x);
    </script>
    
    
    var x=;
    控制台日志(x);
    
    这个很好用。我刚刚测试了我的项目


    如果您想在扩展名为.js的单独文件中使用相同的代码,那么它将不起作用。你会得到一个“意外标记”只有在我的情况下才有效。所有带有“”或带有is todos ejs变量的版本都具有可以使用
    调试的数据,我已经尝试了这两种方法
    res.locals.todo=JSON.stringify(object)<代码>res.render(“test”,{'todos':JSON.stringify({a:1})})
    然后
    var x=
    我更喜欢在ejs中进行字符串化,而不是在路由器中,这样可以在视图中访问我的对象。您可能希望使用对象属性,如果您已经将其字符串化,这将是一个问题。因此,在ejs
    标记中,只需执行以下操作:
    varx=res.render('todo/index', {todos: JSON.stringify(alltodos)}); 
    
    <script>
     var x= <%- todos %>;
     console.log(x);
    </script>
    
    <script>
      var todos = <%-JSON.stringify(todos)%>;
      for (var item of todos) {
        console.log(item)
      }
    </script>