猫鼬无法将“”的属性设置为undefined,每当我尝试创建新条目时。

时间:2020-04-07 19:46:04

标签: javascript node.js mongodb mongoose

我正在建立一个支持门户网站。我必须在哪里记录哪个用户在卖票。 我使用护照,这样我就可以通过req.user获取用户名和_id。我使用 express MongoDB Atlas 作为数据库。我已将数据库模式保存在seaparate文件夹中称为模型。 这是架构文件:

   const mongoose=require("mongoose");

const supportSchema=new mongoose.Schema({
    type:String,
    comment:String,
    date:String,
    status:String,
    author:{
        id:{
            type:mongoose.Schema.Types.ObjectId,
            ref:"User"
        },
        username:String
    }
})

module.exports=mongoose.model("Support",supportSchema);

这是事物的明显方面:

    //posting support to admin
app.post("/admin/support",isLoggedIn,function(req,res){
    const data={
        type:req.body.type,
        comment:req.body.comment,
        status:"Pending"
    }
    Support.create(data,function(err,newsupport){
        console.log(req.user);
        if(err){
            console.log(err);
        }else{
            //add username and id to ticket
             Support.author.id=req.user._id;
             Support.author.username=req.user.username;
            // save ticket
            Support.save();
            res.redirect("/home");
        }
    })
})

正如我们在上面的架构中看到的那样,我已经定义了作者,内部作者也定义了id。每当我尝试创建故障单时,我都会遇到错误。它告诉我“无法设置未定义的属性'id'” 。 我什至通过控制台日志req.user(无法在路由内部访问)进行交叉检查。

我需要app.js中的架构

const Support=require("./models/newsupport");

PS:文件名是newsupport。 我已经像这样配置了mongodb连接:

mongoose
.connect('mongodb+srv://saidarshan:R@mb02501@cluster0-wjhf4.mongodb.net/project?retryWrites=true&w=majority', {
    useNewUrlParser: true,
    useCreateIndex: true,
    useFindAndModify: false,
    useUnifiedTopology: true
})
.then(() => {
    console.log('Connected to DB');
})
.catch((err) => {
    console.log('ERROR', err.message);
});

请帮助我。谢谢

2 个答案:

答案 0 :(得分:0)

在您使用let newTicket = Support.create(...构造函数时,我看不到要在哪里使用新变量。尝试类似newTicket.author.id之类的方法,然后设置import ludwig ludwig.visualize.learning_curves( [train_stats], TARGET, model_names=None, output_directory=None, file_format='pdf' ) 等。

答案 1 :(得分:0)

该Schema声明为正确,但是您正在尝试将作者(子文档)保存在Schema本身,而不是实际文档中。

    Support.author.id=req.user._id;
    Support.author.username=req.user.username;
    // save ticket
    Support.save();

您要保存在新创建的文档而不是架构上。像这样:

app.post("/admin/support",isLoggedIn,function(req,res){
    const data={
        type:req.body.type,
        comment:req.body.comment,
        status:"Pending"
    }
    Support.create(data,function(err,newsupport){
        console.log(req.user);
        if(err){
            console.log(err);
        }else{
            //add username and id to ticket
             newsupport.author.id=req.user._id;
             newsupport.author.username=req.user.username;
            // save ticket
            newsupport.save();
            res.redirect("/home");
        }
    })
})

当然,另一种选择是将所有对象(文档和子文档)组合在一起,一次完成所有操作,这样您就可以避免进行两次查询来执行一项任务。

const data={
        type:req.body.type,
        comment:req.body.comment,
        status:"Pending",
        author: {
            id: req.user._id,
            username: req.user.username
        }
    }

您可以将其传递给Support.create,而不必再在创建的文档上再次调用save方法。