1

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

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});
};
4

2 回答 2

4

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

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

var mongoose = require('mongoose')
    , Schema = mongoose.Schema;

mongoose.connect('mongodb://localhost/test5');

var UserSchema = new Schema({
    email: { type: String, index: true },
    firstName: { type: String },
    lastName: { type: String }
});

mongoose.model('User', UserSchema);

var User = mongoose.model('User');

exports.index = function(req, res) {
    User.findOne({
        email: "someone@something.com"
    }, function(err, user) {
       if(err) {
           res.send(err);
       } else {
           console.log(user.firstName);
           res.render('index', {title: 'Weblio', user: user.firstName});
       }
    });
}
于 2013-07-08T15:25:33.083 回答
1

node 中几乎所有的 IO 都是异步的,这意味着您的 find 方法不会返回实际结果,而是返回一个 Promise,或者它期待一个回调,它将与结果一起调用。

试试这个:

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)});
    });
};
于 2013-07-08T15:28:24.427 回答