在ejs文件中的scripts标签中访问传递的元素

时间:2018-10-28 15:18:49

标签: javascript node.js ejs

基本上,我正在使用javascript通过需要Google地图集成的node.js为我的大学构建应用程序

我通过“ /”路线将一些项目传递到网站的登录页面,并传递了一些数组。最终代码如下所示:

LostItem.find({},function(err,allLostItems){
      if(err)
      {
         console.log("Some error while finding the items in items.js")
         req.flash("error","Following error encountered : " + err.message);
         res.redirect("back");
      }
       else{
           // render the results from arrays
           res.render("landing",{foundItems:allLostItems}); 
      }

});

但是,在使用Landing.ejs文件访问它的同时,使用以下代码:

<script async defer type="text/javascript">
    var locations=[];
    index=0;
    lostItems.forEach(function(item){
    var item_array=[];
     // Some more code ...
</script>

我得到了错误:

  

lostItems未定义

我知道这可行:

<%lostItems.forEach(function(item){%>
    //some code
 <%)};%>

在脚本标签中执行上述代码的正确方法是什么?如果这个问题是基本问题,我深表歉意,我是javascript的新手,只是开始更深入地研究它。

丢失的项目架构为:

var lostItemsSchema=new mongoose.Schema({
    item:String,
    details:String,
    specifications:String,
    date:String,
    time:String,
    location: String,
    lat: Number,
    lng: Number,
    author:{
        id:{
            type:mongoose.Schema.Types.ObjectId,
            ref:"User"
        },
        username:String
    },
    comments:[
        {
            type: mongoose.Schema.Types.ObjectId,
            ref:"Comment"
        }
    ]
}); 

2 个答案:

答案 0 :(得分:2)

您可以使用:

let items = '<%- lostItems %>';
items.forEach(function(item){
  // Some more code ...
}

let items = '<%= lostItems %>';
items.forEach(function(item){
  // Some more code ...
}

如果是JSON,请在客户端中对其进行解析:

let items = JSON.parse('<%= lostItems %>');

let items = JSON.parse('<%- lostItems %>');

或在服务器中将其字符串化:

res.render("landing",{ foundItems: JSON.stringify(allLostItems) });

答案 1 :(得分:0)

好的,我找到了解决此问题的方法。在服务器端使用以下代码:

new

并在客户端使用以下代码将其修复。

{lostItems:JSON.stringify( allLostItems)}