如何修复未定义的mongoose模式?

时间:2018-06-06 06:53:55

标签: node.js express mongoose

我有一个包含一些子模式的用户模式。我有两个类似的子模式,其中一个被识别,但另一个未定义。 我的用户架构如下:

var UserSchema = new Schema({

            company: String,
            resetPasswordToken: String,
            resetPasswordExpires: Date,
            isAdmin: {type: Boolean, default: false},

            projects: [
                {
                    type: mongoose.Schema.Types.ObjectId,
                    ref: "Project",
                }
            ],
            trackers: [
                {
                    type: mongoose.Schema.Types.ObjectId,
                    ref: "Tracker",
                }
            ],


});

在上面的模式中,我的项目在后期路线中运行良好。表单会被发布,保存并正确显示,但跟踪器的相同路径无法发布,并且“跟踪器未定义”错误:

项目后路线:

app.post("/myprojects", function(req,res){

User.findById(req.user._id, function(err, user){
        if(err){
            console.log(err);
            }else{

                var pname = req.body.pname;
                var pnumber = req.body.pnumber;

                 var newProject = {
                    pname:pname,
                    pnumber:pnumber, 

                 };

                Project.create(newProject, function(err, project){
                    if(err){
                        console.log(err);
                           }else{
                                user.projects.push(project);
                                user.save();
                                res.redirect("/myprojects");


                                }
                });
            }
    });
});

这是跟踪帖:

app.post("/tracker", function(req,res){

User.findById(req.user._id, function(err, user){
        if(err){
            console.log(err);
            }else{

                var tname = req.body.tname;
                var tnumber = req.body.tnumber;

                 var newTracker = {
                    tname:tname,
                    tnumber:tnumber, 

                 };

                Tracker.create(newTracker, function(err, tracker){
                    if(err){
                        console.log(err);
                           }else{
                                user.trackers.push(tracker);
                                user.save();
                                res.redirect("/tracker");

                                }
                });
            }
    });
}); 

请注意,项目架构和跟踪器架构都保存在模型文件夹中,并且在app.js中是必需的

错误的照片: enter image description here

1 个答案:

答案 0 :(得分:0)

它必须是undefined,因为trackers未保存在user对象的数据库中。您可以使用以下方法解决问题。

user.trackers = user.trackers || [];
user.trackers.push(tracker);