Rethinkdb изменяет подачу в Express.js с помощью thinky
Создал базовое приложение express.js и добавил модель (используя thinky и rethinkdb), пытающуюся передать ленту изменений в файл Jade и не в состоянии понять, как передать результаты ленты. Насколько я понимаю, change () возвращает бесконечный курсор. Так что всегда ждем новых данных. Как справиться с этим в экспресс рез. Есть идеи, что мне здесь не хватает?
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;
1 ответ
Проблема, с которой, я полагаю, вы сталкиваетесь, заключается в том, что feed.each
это цикл, который вызывает функцию для каждого элемента, содержащегося в ленте. Таким образом, чтобы получить доступ к doc
содержалась в console.log(doc)
вам нужно будет либо поместить свой код в функцию, в которой doc
существует (находится в области видимости переменной doc
), или вам нужно будет создать глобальную переменную для хранения значений документа.
Так, например, предполагая, doc
это строка и что вы хотите разместить все doc
в массиве. Вы должны начать с создания переменной, которая имеет res.render
в, который для этого примера будет MYDOCS
, Затем вам нужно будет добавить каждый документ к нему, и после этого вы просто будете использовать MYDOC каждый раз, когда пытаетесь получить доступ к документу за пределами feed.each
функция.
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;