Массив задач не определен, даже когда задачи [0] видны в коллекции MongoDB - PullRequest
0 голосов
/ 03 апреля 2020

Я создал модель для пользователя, которая включает в себя имя пользователя, 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...