当前位置: 首页 > 知识库问答 >
问题:

如何修复未定义的mongoose模式?[副本]

井兴怀
2023-03-14

我有一个包括几个子模式的用户模式。我有两个相似的子模式,其中一个是可以识别的,但另一个是一直未定义的。我的用户架构如下:

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",
                }
            ],


});

在上面的模式中,我有一个项目在post路线中工作得很好。表单已正确发布、保存和显示,但无法发布跟踪器的相同路由,并给出“跟踪器未定义”错误:

项目后路由:

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中是必需的

共有1个答案

杜凯
2023-03-14

它必须为您提供未定义,因为跟踪器未保存在用户对象的数据库中。您可以使用以下方法修复该问题。

user.trackers = user.trackers || [];
user.trackers.push(tracker);
 类似资料: