Я создал модель для пользователя, которая включает в себя имя пользователя, phone_no и массив задач, которые пользователь должен выполнять. Я установил значение по умолчанию для примера задачи, как показано в коде ниже. Этот пример задачи можно увидеть в моей коллекции MongoDB, но он не отображается на панели инструментов, поскольку я пытался выполнить запрос POST. Отображаемая ошибка: «Не удается прочитать свойство» pu sh «undefined», и я понимаю, что это означает, что массив задач не определен. Пожалуйста, помогите определить, почему массив задач не определен, когда задание [0], т. Е. Значение по умолчанию для задач уже обновлено в базе данных. Ниже приводится моя модель StudentUser. js:
var mongoose = require("mongoose");
var StudentUserSchema = new mongoose.Schema({
username:{
type: String,
required: true,
unique:true
},
password:{
type: String,
required: true
},
phone_no:{
type: String,
required: true,
},
tasks:{
type: Array,
default:[
{'name':'Sample task','description':'This is a sample task', '_id':'123456789'}
]
},
});
module.exports = User = mongoose.model("User",StudentUserSchema);
Ниже приведен код запроса GET и POST для моей панели инструментов, который должен отображать все задачи, опубликованные пользователем:
const User = require("../models/StudentUser");
router.post("/studentDashboard", ensureAuthenticated, function(req,res){
var name = req.body.name;
var description = req.body.description;
var pas = uuidv4();
var newTask = {name:name, description:description, _id:pas}
//create new post and save to DB
User.findOne({_id: req.user._id},function(err, user){
if(err){
console.log(err);
}
else
{
let tasks= req.user.tasks;
tasks.push(newTask);
User.findOneAndUpdate({_id: req.user._id},{tasks:tasks },(err,doc)=>{
if(err) return res.json({success: false, err})
res.redirect("/studentDashboard");
})
}
})
});
router.get("/studentDashboard",ensureAuthenticated, function(req,res){
User.findOne({_id: req.user._id},function(err, user){
if(err){
console.log(err);
}
else
{
res.render("../views/studentDashboard",{layout:"layoutStudent",tasks:req.user.tasks})
}
})
});
Код HTML со встроенным JS для приборной панели:
<div class="row text-center" style="display: flex; flex-wrap: wrap;">
<% if(typeof tasks != "undefined") { %>
<% tasks.forEach(function(task){ %>
<div class="col-md-3 col-sm-6 taskblog">
<div class="thumbnail">
<div class="caption">
<h4><%= task.name %></h4>
</div>
<div class="caption">
<h4><%= task.description %></h4>
</div>
</div>
</div>
<%});%>
<% } %>
</div>