node.js - 如何将我的结果数组从 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);
})
})
}
解决方案
您的 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);
})
})
}
推荐阅读
- flutter - Flutter VideoPlayer 无法播放 youtube 视频
- javascript - 使用 useEffect 调用 API。当尝试映射用户时,它说 TypeError: Cannot read property 'map' of undefined
- css - 使按钮垂直增长以适应内容,而不是水平增长
- mapbox - 使用外部geojson文件时Mapbox过滤器不起作用
- sed - 使用 sed 仅打印包含单词的行的部分内容
- javascript - 通过 Webpacker 在 Rails 中使用 Webpack 插件
- flutter - 在颤动中从磁盘加载动态动画
- python-3.x - 熊猫,将两列中的唯一值合并为一列,同时保留顺序
- c++ - 使用 URLDownloadToFile 下载文件
- python - Python:Scrapy收集选择器子项的所有文本