【问题标题】:How to display a Mongo field on Nodejs with Mongoose and Jade?如何使用 Mongoose 和 Jade 在 Nodejs 上显示 Mongo 字段?
【发布时间】:2013-05-13 03:53:01
【问题描述】:

目前我看到的所有内容都显示整个文档,而不仅仅是一个字段。我将如何只显示一个字段?

我尝试了以下方法,但我得到了“未定义”,我看不到任何显示。

方式一主js:

// app.js

var schema = new mongoose.Schema({ a_field : String }, 
                                 { collection : 'the_col_with_data' });
var DocumentModel = mongoose.model('Doc', schema);
var a_document = DocumentModel.findOne({}, callback);

app.get('/', function(req, res) {
    res.render('index', {
                            pass_var: a_document.a_field
                        });
});

方式 1 视图:

// index.jade

#{ pass_var }

方式2主要js:

// app.js

var schema = new mongoose.Schema({ a_field : String }, 
                                 { collection : 'the_col_with_data' });
var DocumentModel = mongoose.model('Doc', schema);
var a_document = DocumentModel.findOne({}, callback);

app.get('/', function(req, res) {
    res.render('index', {
                            pass_var: a_document
                        });
});

方式 2 视图:

// index.jade

#{ pass_var.a_field }

【问题讨论】:

    标签: node.js mongoose pug


    【解决方案1】:

    与猫鼬的交互是异步的。这意味着,您不能依赖猫鼬操作的返回值。您必须在回调中执行对文档进行操作的逻辑。因此,在您的情况下,a_document 并不指向您要查找的文档。相反,您必须在回调中使用该文档:

    app.get('/', function(req, res) {
        DocumentModel.findOne({}, function(err, doc) {
            if(err) {
                res.send(500);
                return;
            }
            res.render('index', {pass_var: doc});
        });
    });
    

    【讨论】:

    • 非常感谢 NilsH!一个后续问题,因为我是 Node.js 的新手:在您的代码中 res.render() 是在二级回调中。这是否意味着回调可以有很多层次,并且它们只是递归地向外返回到父回调?你知道我可以在哪里阅读更多相关信息吗?
    • 是的,你经常有几个级别的回调。因此,为了使其更具可读性,我建议您查看现有的众多“流”库之一,例如 asyncstepseq,或者它们都叫什么。
    猜你喜欢
    • 2016-01-23
    • 2014-02-16
    • 2018-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    相关资源
    最近更新 更多