Javascript 简单的db mongo查询出错了吗?

Javascript 简单的db mongo查询出错了吗?,javascript,node.js,mongodb,mongoose,pug,Javascript,Node.js,Mongodb,Mongoose,Pug,嘿,我试图从index.js文件中查询数据库(mongodb),然后将查询中的值返回到一个变量中,这样我就可以使用该变量在网站上显示人员信息。我目前有这个代码,但它给我的问题。试图找出如何以正确的方式查询它。我正在查询电子邮件,但我想根据电子邮件查询提取名字。我正在使用node.js和jade作为我的视图引擎 var mongoose = require('mongoose') , db = mongoose.createConnection('mongodb://localhost/tes

嘿,我试图从index.js文件中查询数据库(mongodb),然后将查询中的值返回到一个变量中,这样我就可以使用该变量在网站上显示人员信息。我目前有这个代码,但它给我的问题。试图找出如何以正确的方式查询它。我正在查询电子邮件,但我想根据电子邮件查询提取名字。我正在使用node.js和jade作为我的视图引擎

var mongoose = require('mongoose')
  , db = mongoose.createConnection('mongodb://localhost/test5');

var user = function (name) { 
    var name = db.users.find({ email: 'works@gmail.com' }).pretty();
    console.log(name); 
    return name;
};

exports.index = function(req, res) {
    res.render('index', { title: 'Weblio', user: user});
};

看起来您使用的是Mongoose,所以我建议您使用它们的查询功能,这些功能在过去对我很有效。它还有助于为存储在MongoDB中的数据建立Mongoose模型

试试这个(注意:它未经测试,但我是从一个正常运行的程序中提取的):


看起来您使用的是Mongoose,所以我建议您使用它们的查询功能,这些功能在过去对我很有效。它还有助于为存储在MongoDB中的数据建立Mongoose模型

试试这个(注意:它未经测试,但我是从一个正常运行的程序中提取的):


节点中几乎所有的IO都是异步的,这意味着您的find方法不会返回实际结果,而是返回一个承诺,或者它期望使用结果调用回调

试试这个:

var mongoose = require('mongoose')
  , db = mongoose.createConnection('mongodb://localhost/test5');


exports.index = function(req, res) {
  db.users.find({ email: 'works@gmail.com' }, function(err, data){
    if(err){
      return req.send(500);
      }
    res.render('index', { title: 'Weblio', user: JSON.stringify(data)});
    });
};

节点中几乎所有的IO都是异步的,这意味着您的find方法不会返回实际结果,而是返回一个承诺,或者它期望使用结果调用回调

试试这个:

var mongoose = require('mongoose')
  , db = mongoose.createConnection('mongodb://localhost/test5');


exports.index = function(req, res) {
  db.users.find({ email: 'works@gmail.com' }, function(err, data){
    if(err){
      return req.send(500);
      }
    res.render('index', { title: 'Weblio', user: JSON.stringify(data)});
    });
};

findOne是否比find好,假设您搜索的是唯一的,并且只搜索一个用户,那么这两个调用之间的区别是什么?
findOne
只返回它找到的第一个结果,而不是搜索整个集合。我相信您也可以使用常规的
find
查询设置限制。在按电子邮件地址搜索的情况下,它们很可能是唯一的,因此只返回它找到的第一个是有意义的。但这实际上取决于你的数据集。好的,无论何时你想在页面上调出用户的个人资料信息,这是一种智能的查询数据库的方法吗?我最终要做的是从一个登录的用户那里获取一个cookie,然后使用电子邮件查询他的信息,并在userprofile页面上显示他的信息。我也在使用主干网,所以从主干网获取信息是否比像这样进行查询更好?问题是findOne是否比find好,假设您搜索的是唯一的,两个调用之间的区别是什么,而且您只搜索一个用户?
findOne
只返回它找到的第一个结果,而不是搜索整个集合。我相信您也可以使用常规的
find
查询设置限制。在按电子邮件地址搜索的情况下,它们很可能是唯一的,因此只返回它找到的第一个是有意义的。但这实际上取决于你的数据集。好的,无论何时你想在页面上调出用户的个人资料信息,这是一种智能的查询数据库的方法吗?我最终要做的是从一个登录的用户那里获取一个cookie,然后使用电子邮件查询他的信息,并在userprofile页面上显示他的信息。我也在使用主干网,所以从主干网获取信息而不是像这样进行查询是不是更好。谢谢这样做,是的,我有一个用户模型不确定我是否可以这样使用它。执行res.send(err)还是req.send(500)更好?这取决于您,您是否希望用户看到错误。您可以向用户执行
res.send(500)
,也可以执行
console.log(err)
,这样您就可以看到它。有意义的是,对于这种情况或人们通常采取的路线,什么是最佳做法?我喜欢向我的用户显示干净的错误,所以我可能会将其记录下来,并在前端显示一些漂亮的内容。谢谢您的工作,是的,我有一个用户模型,不确定我是否可以这样使用它。执行res.send(err)还是req.send(500)更好?这取决于您,您是否希望用户看到错误。您可以向用户执行
res.send(500)
,也可以执行
console.log(err)
,这样您就可以看到它。有意义的是,对于这种情况或人们通常采取的路线,什么是最佳做法?我喜欢向我的用户显示干净的错误,所以我可能会记录它并在前端显示一些漂亮的东西。