Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 控制器中的MongoDB查询_Node.js_Mongodb - Fatal编程技术网

Node.js 控制器中的MongoDB查询

Node.js 控制器中的MongoDB查询,node.js,mongodb,Node.js,Mongodb,我刚接触过MVC和nodejs,花了很多时间研究如何解决我的错误,但仍然没有找到解决方案,真的需要一些帮助。当我运行npm start时通过cli:正确的数据显示在mongodb中,但我无法在我的网页上显示。 我的路线是: router.get('/gallery/description', artController.description); 控制器是: var paintings = require('../models/get_painting'); console.log('this

我刚接触过MVC和nodejs,花了很多时间研究如何解决我的错误,但仍然没有找到解决方案,真的需要一些帮助。当我运行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返回正确的信息,但当将其传递到description变量时,网页上显示的所有信息都是[object promise]

视图:


我假设发生这种情况是因为
查询
是一个承诺(从技术上讲,在您使用之前它不是一个承诺,但您可以将其作为承诺使用)。你出口的是承诺,而不是结果。因此,如果您使用
wait
等待它完成,那么您将获得绘画文档,而不是承诺本身

我很难告诉你如何用你现在的风格来解决这个问题。以下是我将如何构建它:

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
wait


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

您能将模板添加到问题中吗?@MikaS是您要查找的视图吗?我已经加上了。这里有很多错误。我建议你让你的控制器把你所有的代码放在一起工作,而不是分散在单独的模块中,然后从那里开始。尽管看起来好像有很多错误,但所有这些都按照预期工作,并在我们学校的项目主持人上直播。唯一不起作用的是从MongoDB到页面的数据。我可以在cli中运行npm start,它会返回所有正确的信息。但是显示它没有发生我在async上做了一些挖掘,等待你的方法看起来更干净,更容易理解。特别是这是我第一次能够缩小一些重要信息的范围。我将此标记为解决方案,因为它指向更好/更容易的结果。
module.exports.description = async (req, res) => {
  const paintings = await Painting.find({})

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

}