【问题标题】:cant get data from database after multiple schema declared (mongoose + express + mongodb声明多个模式后无法从数据库中获取数据(mongoose + express + mongodb
【发布时间】:2012-12-01 04:29:03
【问题描述】:

我是 node.js 的新手,我在访问声明多个 mongoose 模式时遇到问题。

//模型中的schema.js

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

//User Schema
var userSchema = new Schema({
id: ObjectId,
firstname: {type: String, require: true},
lastname: {type: String, require: true},
username: {type: String, unique: true, require: true},
password: {type: String, require: true},
role: {type: [String], require: true}
})

var User = mongoose.model('User', userSchema);
module.exports = User;

//Question Schema
var qnSchema = new Schema({
id: ObjectId,
question: {type: String, require: true},
module_id: {type: ObjectId, ref: 'Module'}
})

var Question = mongoose.model('Question', qnSchema);
module.exports = Question;

//Answer Schema
var ansSchema = new Schema({
id: ObjectId,
answer: String,
question: {type: ObjectId, ref: 'Question'}
})

var Answer = mongoose.model('Answer', ansSchema);
module.exports = Answer;

//Module Schema
var modSchema = new Schema({
id: ObjectId,
name: {type: String, require: true}
})

 var Module = mongoose.model('Module', modSchema);
  module.exports = Module;

//Role Schema
var roleSchema = new Schema({
id: ObjectId,
role: {type: String, require: true}
})

var Role = mongoose.model('Role', roleSchema);
module.exports = Role;

//控制器中的index.js

var mongoose = require('mongoose');
var User = require('../models/schema');
var db = mongoose.connect('mongodb://localhost/damai');

module.exports = function(app) {

app.get('/', function(req, res) {
    if (typeof req.session.userid == 'undefined') {
        res.render('login', { title: app.get('title') });           
    } else {
        res.render('index', { title: app.get('title') });       
    }
});

app.post('/login', function(req, res) {
    passwordVerification(req, res);
});
}

function passwordVerification(req, res)
{
var userid = req.param('userid');
var password = req.param('password');
User.findOne({'username': userid},{'password': 1}, function(err, cb)
{
    console.log(cb);
    if(cb!= null)
    {
        if (password == cb.password) {
            req.session.userid = userid;
            res.render('index', { title: app.get('title'), 'userid':    userid });
        } else {
            res.render('login', { title: app.get('title'), error: 'Invalid login'});
        }
    }
    else
    {
        res.render('login', { title: app.get('title'), error: 'Invalid login'});
    }
});
}

当我的 schema.js 中只有“用户架构”时,来自 index.js 的方法“passwordVerification()”的数据库调用将返回从数据库中检索到的相关密码。但是,当我开始在 schema.js 中添加其他架构(例如“问题架构”)时,“passwordVerification()”方法将始终返回 null。

【问题讨论】:

  • 当我只有 userSchema 声明时,我可以从 user 表中检索数据。但是,当我添加 qnSchema 时,我无法从用户表中检索数据,它只返回 null
  • 我已经编辑了这个问题。我希望你能理解这个问题。抱歉英语不好
  • 您不断覆盖 schema.js 中的 exports.module 而 index.js 不会覆盖 require schema.js。这是您正在运行的实际代码吗?
  • 对不起,我的错。我正在运行 user.js,因为 schema.js 不起作用。那我应该怎么处理exports.module呢?因为没有exports.module我无法访问表格

标签: node.js mongodb schema mongoose express


【解决方案1】:

当从单个文件中导出多个模型时,例如在 schema.js 中,您需要为每个导出的模型指定其自己的 exports 字段名称。

例如,将 schema.js 中的多个 module.exports = ... 行替换为导出所有模型的文件末尾的以下代码:

module.exports = {
    User: User,
    Question: Question,
    Answer: Answer,
    Module: Module,
    Role: Role
};

然后在 index.js 中你可以像这样访问模型:

var models = require('./schema');
...
models.User.findOne(...

【讨论】:

  • 您是否使用相同的模型来调用所有模型?
  • 其实我有同样的情况,但它不工作它给 WebModel 不是构造函数
  • 对于填充文件它显示空值,因为填充集合没有导出。如何克服这一点? :(
猜你喜欢
  • 2019-10-25
  • 1970-01-01
  • 2013-08-16
  • 2012-06-04
  • 2020-01-13
  • 2018-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多