Node.js 如何使用猫鼬和翡翠在NodeJ上显示猫鼬字段?

Node.js 如何使用猫鼬和翡翠在NodeJ上显示猫鼬字段?,node.js,mongoose,pug,Node.js,Mongoose,Pug,目前,我看到的所有内容都显示整个文档,而不仅仅是一个字段。如何仅显示一个字段 我已经尝试了以下方法,但是我得到了“未定义”的结果,在那里我看不到任何显示 路1主js: // app.js var schema = new mongoose.Schema({ a_field : String }, { collection : 'the_col_with_data' }); var DocumentModel = mongoos

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

我已经尝试了以下方法,但是我得到了“未定义”的结果,在那里我看不到任何显示

路1主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 }

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

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

非常感谢尼尔什!自从我不熟悉Node.js以来,还有一个后续问题:在您的代码中,
res.render()
位于第二级回调中。这是否意味着回调可以有很多层次,它们只是递归地向外返回到父回调?你知道我在哪里可以读到更多关于这方面的信息吗?是的,你经常有几个级别的回调。为了让它更具可读性,我建议您看看现有的许多“流”库中的一个,比如,或者,或者它们都被称为什么。