首页 > 解决方案 > 如何将我的结果数组从 JS 文件到我的 ejs 页面..给出完整的代码细节

问题描述

这是我的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);
            
        })    
     })    
}

标签: node.jsmongodbexpressejs

解决方案


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

这是因为你是:

  • 通过具有多个名为 result 的变量来隐藏包含回调的结果变量
  • 实际上并不是调用回调函数,而是试图返回它。

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

  • 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);
        })
     })
}

推荐阅读