控制器中的MongoDB查询

时间:2017-11-07 13:10:18

标签: node.js mongodb

我是使用nodejs的MVC的新手,并花了很多时间研究如何解决我的错误,但仍然没有提出解决方案,真的需要一些帮助。当我运行npm start时通过cli:从mongodb显示正确的数据但是我无法在我的网页上显示。 我的路线是:

router.get('/gallery/description', artController.description);

控制器是:

var paintings = require('../models/get_painting');
console.log('this is the returned value of paintings ' + paintings);

const description = function(req, res) {res.render('description', 
{title:'description', art: 'this is what i get ' + paintings)});};

模特:

var paintings = require('./painting_schema');


var query = paintings.find({}).then(function(picture){
    console.log(picture);
    return picture;
  }).catch(function(err){});

module.exports = query;

正如我所说,控制器中的console.log返回正确的信息,但在将其传递到描述变量时,网页上显示的所有内容都是[对象承诺]。

视图:

extends layout

block content
  .container-fluid
    each item in art
      p= item

1 个答案:

答案 0 :(得分:1)

我认为这是因为query是一个承诺(从技术上讲,它不是一个承诺,直到你使用exec(),但你可以将它作为一个承诺)。您导出承诺,但不导出其结果。因此,如果您使用await等待它完成,那么您将获得绘画文档而不是承诺本身。

我有点难以告诉你如何用你现在的风格修复它。我将如何构建它:

artController文件中:

module.exports.description = async (req, res) => {
  const paintings = await Painting.find({})

  res.render('description', { 
    title: 'description',
    art: 'this is what i get ' + paintings
  });

}

请注意asyncawait

模型应包含您的绘图架构。删除其中的查询。如果您使用mongoose.model(Painting, paintingSchema)创建模型,则可以使用const Painting = mongoose.model('Painting');在控制器文件中获取它。