【问题标题】:Mongoose cannot read property of undefined with complex schemaMongoose 无法读取具有复杂模式的未定义属性
【发布时间】:2016-01-23 12:08:10
【问题描述】:

我有以下用户架构:

var mongoose = require('mongoose');
var userSchema = mongoose.Schema({
    local: {
         email: String,
         password: String
    },
    education: {
        school: {
            start: Boolean,
            name: String,
            graduationYear: String
        },
        college: {
            start: Boolean,
            name: String,
            career: String,
            enterYear: String,
            graduationYear: String
        }
    }
});

现在,当我提交包含所有这些信息的表单时,我的应用会将 POST 请求路由到以下函数:

exports.postEditEducation = function (req, res){
    process.nextTick(function (){
        var user = req.user;

        user.education.school.start = req.body.schoolStart;
        user.education.school.name = req.body.schoolName;
        user.education.school.graduationYear = req.body.graduationYear;

        user.education.college.start = req.body.collegeStart;
        user.education.college.name = req.body.collegeName;
        user.education.college.career = req.body.collegeCareer;
        user.education.college.enterYear = req.body.collegeEnterYear;
        user.education.college.graduationYear = req.body.collegeGraduationYear;

        user.save(function (err){
            if (err)
                throw err;

            res.redirect('/profile');
        });
    });
};

但是,当我提交信息时出现以下错误:

user.education.college.start = req.body.collegeStart;
                             ^
TypeError: Cannot set property 'start' of undefined
    at /file.js:464:46
    at process._tickCallback (node.js:419:13)

【问题讨论】:

    标签: node.js mongodb mongoose schema


    【解决方案1】:
    var user = req.user; 
    

    您已经为持有 req.user 创建了变量

     user.education.college.start 
    

    为此,您应该创建一个用户集合实例。为用户模式创建一些实例。 例如,我假设 userschema 的集合名称为 usercollection:

    var userobj = new usercollection(); 
    userobj.education.college.start = req.body.schoolStart; ..
    

    希望这可能有用。

    【讨论】:

    • 实际上,这对我一点帮助都没有,因为我使用护照来验证用户,所以我可以使用 req.user 从请求中检索用户。我的问题是我可以设置所有学校属性,但不能设置大学属性
    猜你喜欢
    • 2019-03-23
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 2018-10-06
    • 1970-01-01
    • 2015-05-15
    • 2019-06-20
    • 2019-03-20
    相关资源
    最近更新 更多