我是使用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
答案 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
});
}
请注意async
和await
。
模型应包含您的绘图架构。删除其中的查询。如果您使用mongoose.model(Painting, paintingSchema)
创建模型,则可以使用const Painting = mongoose.model('Painting');
在控制器文件中获取它。