使用thinky在Express.js中导入Rethinkdb变更

创build了一个基本的express.js应用程序,并添加了一个模型(使用thinky和rethinkdb)尝试将更改的feed传递给jade文件,无法确定如何传递feed的结果。 我的理解是,changes()返回无限的游标。 所以它总是在等待新的数据。 如何处理在快递水库。 任何想法,我在这里想念什么?

var express = require('express'); var router = express.Router(); var thinky = require('thinky')(); var type = thinky.type; var r = thinky.r; var User = thinky.createModel('User', { name: type.string() }); //end of thinky code to create the model // GET home page. router.get('/', function (req, res) { var user = new User({name: req.query.author}); user.save().then(function(result) { console.log(result); }); //User.run().then(function (result) { //res.render('index', { title: 'Express', result: result }); //}); User.changes().then(function (feed) { feed.each(function (err, doc) { console.log(doc);}); //pass doc to the res res.render('index', { title: 'Express', doc: doc}) //doc is undefined when I run the application. Why? }); }); module.exports = router; 

我相信你正面临的问题是, feed.each是一个循环,调用包含在饲料中的每个项目的包含函数。 因此,要访问console.log(doc)包含的console.log(doc)您需要将代码放置在doc所在的函数中(位于variablesdoc的范围内),或者您将需要全局variables来存储文档值。

例如,假设doc是一个string,并且您希望将所有doc放在一个数组中。 您将需要通过创build一个具有res.render所在的范围的variables来开始,这个例子将是MYDOCS 。 然后,您需要将每个文档附加到它,然后,只要尝试访问feed.each函数之外的文档,就可以简单地使用MYDOC。

 var MYDOCS=[]; User.changes().then(function (feed){ feed.each(function (err, doc) { MYDOCS.push(doc)}); }); router.get('/', function (req, res) { var user = new User({name: req.query.author}); user.save().then(function(result) { console.log(result); }); //User.run().then(function (result) { //res.render('index', { title: 'Express', result: result }); //}); res.render('index', { title: 'Express', doc: MYDOCS[0]}) //doc is undefined when I run the application. Why? }); module.exports = router; 
Interesting Posts