如何将我的结果数组从 JS 文件带到我的 ejs 页面..给定完整的代码细节

how to take my result array from JS files to my ejs pages ..given full code details

这是我在 js 文件中的代码。结果存储在数组结果中,我可以通过 console.log(在 js 文件中)看到它......我想获取结果并打印在我的 ejs 文件中..你能指导如何使用这个吗..

我的js文件包含排序功能,写法如下:

function sortEvents(){
    var MongoClient = require('mongodb').MongoClient;
    var url = "mongodb://localhost:27017/";


    MongoClient.connect(url, function(err, db)
     {
        if (err) throw err;
        var dbo = db.db("mydb");
        var mysort = { entryfees: -1 };
        dbo.collection("eventtrans").find().sort(mysort).toArray(function(err, result) 
        {     
            if (err) throw err;
            console.log(result);
            
            db.close();
            return(result);
            
        })    
     })    
}

module.exports = sortEvents;

我的app.js文件如下

正在调用 sortEvents 并且它正常工作,因为我可以在我的控制台中看到 console.log 值

sortEvents  = require("./sortevent.js");
app.get("/prlist",function(req,res){
    
    console.log("inside prlist")
    var result=sortEvents(); 
   
    res.render("prlist.ejs",{prlist:result});
});

我的 ejs prlist.ejs 文件如下..我试图在我的 ejs 屏幕上打印结果值..也包含了 ejs 标签..但它无法识别 prlist ...

  <% prlist.forEach(function(abc){ %>
        <div class="col-md-4 col-sm-6">
            <div >
                <h6><%= abc._id %></h6>
                <h6><%= abc.eventname %></h6>

                <hr>
            </div>
        </div>   
    <% }); %>


when i run the app.js , the error i am getting is like below

TypeError: C:\Suren\NewProject\views\prlist.ejs:22
    20|
    21| <div class="row text-center" style="display:flex; flex-wrap: wrap;">
 >> 22|     <% prlist.forEach(function(abc){ %>
    23|         <div class="col-md-4 col-sm-6">
    24|             <div >
    25|                 <h6><%= abc._id %></h6>

Cannot read property 'forEach' of undefined
    at eval (C:\Suren\NewProject\views\prlist.ejs:11:15)


could you pls help where i am going wrong.. 

我以这种方式更改了代码..但没有帮助..

app.get("/prlist",function(req,res){
    
    console.log("inside prlist")
    //var result= sortEvents();
    sortEvents(function(result) {
        console.log(results);
        // Code that depends on 'result'
        res.render("prlist.ejs",{prlist:result});
    });
});

我的 js 文件现在看起来像

function sortEvents(result){
    var MongoClient = require('mongodb').MongoClient;
    var url = "mongodb://localhost:27017/";


    MongoClient.connect(url, function(err, db)
     {
        if (err) throw err;
        var dbo = db.db("mydb");
        var mysort = { entryfees: -1 };
        dbo.collection("eventtrans").find().sort(mysort).toArray(function(err, result) 
        {     
            if (err) throw err;
            console.log("inside sortevent");
            console.log(result);
            
            db.close();
            return(result);
            
        })    
     })    
}

您的 sortEvents 函数未正确触发您传入的回调。

这是因为你是:

  • Shadowing result 变量包含您的回调,方法是将多个变量命名为 result
  • 实际上并没有调用回调函数,而是试图return它。

在下面查看我对您的更新代码稍作修改的版本。我有:

  • sortEvents 函数的 result 参数重命名为 callback
  • 在异步查询结果处理程序结束时调用 callback
function sortEvents(callback){
    var MongoClient = require('mongodb').MongoClient;
    var url = "mongodb://localhost:27017/";

    MongoClient.connect(url, function(err, db) {
        if (err) throw err;
        var dbo = db.db("mydb");
        var mysort = { entryfees: -1 };
        dbo.collection("eventtrans").find().sort(mysort).toArray(function(err, result) {     
            if (err) throw err;
            console.log("inside sortevent");
            console.log(result);
            
            db.close();
            callback(result);
        })
     })
}