gpt4 book ai didi

node.js - find() 和游标问题 : . toArray 与cursor.forEach 方法显示不同的结果和错误 "Can' 发送后设置 header 。”

转载 作者:太空宇宙 更新时间:2023-11-04 02:55:44 25 4
gpt4 key购买 nike

嗨,新手,我在 Express 中使用本地主机上的视频数据库尝试了 .toArray 方法。这段代码工作正常,我能够使用 Handlebars 作为我的模板引擎显示数据,每个数据在有边框的容器中显示标题、年份和 imdb:

MongoClient.connect('mongodb://127.0.0.1:27017', function(err, database){
assert.equal(null,err);
console.log('Successfully connected to MongoDB');

var db = database.db('video');

router.get('/', function(req,res){
db.collection('movieDetails').find({}).toArray(function(err,result){
res.render('home', {
title: 'Movies',
movieDetails: result
});
database.close();
});
});
});

但是,使用光标方法,我看不到任何数据,只看到边框和标签,并且我在 bash shell 上收到此错误“发送后无法设置 header ”。这是代码:

MongoClient.connect('mongodb://127.0.0.1:27017', function(err, database){
assert.equal(null,err);
console.log('Successfully connected to MongoDB');

var db = database.db('video');

router.get('/', function(req,res){
var query = {};
var cursor = db.collection('movieDetails').find(query);
cursor.forEach(
function(result){
res.render('home',{
title: 'Movies',
movieDetails: result
});
},
function(err){
assert.equal(err, null);
return database.close();
}
);
});
});

这是我的主页使用 Handlebars 模板引擎的代码:

{{#each movieDetails}}
<div class="movie_data">
<h5>{{this.title}}</h5>
<p><strong>Year:</strong> {{this.year}} <strong>Imdb:</strong> {{this.imdb}}</p>
</div>
{{/each}}

需要帮助,我似乎不知道如何使用光标方法显示数据,谢谢!

最佳答案

您共享的两个代码片段之间存在语义差异。罪魁祸首在结果处理程序中。

在第一个处理程序(作为 toArray 函数的回调)中,告诉库以数组的形式为您提供结果。当您要求 Express 服务器发送响应时,您将传递存储的整个数组(引用存储在 result 变量中)。

在第二个处理程序中,您使用游标方法,forEach 调用告诉 Mongo 库对游标结果内的每个元素执行回调。这意味着如果您的查询返回 5 部电影,则回调将执行 5 次。这也意味着 res.render 将尝试执行 5 次。这将导致您看到的错误,因为在第二次迭代中,您引用的 res 实例已经被发送。

由于 Handlebars 内的处理程序需要一个电影数组,而您给出的响应是单个电影实例(请记住 forEach 方法会将集合中的每个项目单独传递给 result 参数内的回调),因此您的页面将无法正确呈现。

希望这对您有所帮助。祝你好运:)

关于node.js - find() 和游标问题 : . toArray 与cursor.forEach 方法显示不同的结果和错误 "Can' 发送后设置 header 。”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48417530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com