1

创建了一个基本的 express.js 应用程序并添加了一个模型(使用 thinky 和 ​​rethinkdb),试图将 changesfeed 传递给玉文件,但无法弄清楚如何传递 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;
4

1 回答 1

1

我相信您面临的问题feed.each是一个循环,它为提要中包含的每个项目调用包含的函数。因此,要访问doc包含的内容,console.log(doc)您需要将代码放在doc存在的函数中(在变量的范围内doc),或者您需要创建一个全局变量来存储文档值.

因此,例如,假设doc是一个字符串,并且您希望将所有 doc' 放在一个数组中。您需要首先创建一个范围res.render为 in 的变量,在本示例中为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;
于 2017-02-15T22:37:25.843 回答