Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Express、Node和Mongo中,计时功能正常_Javascript_Node.js_Mongodb_Express_Mongoose - Fatal编程技术网

Javascript 在Express、Node和Mongo中,计时功能正常

Javascript 在Express、Node和Mongo中,计时功能正常,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,我正在开发一个应用程序,如果家长用户需要创建一个学生对象,家长用户和教师用户都可以访问该对象。除了这件事,一切正常。当父用户创建学生时,它将重定向到用户的仪表板,新创建的学生将显示在该仪表板上。但是,在我注销并重新登录之前,该学生不会显示。我假设这是因为我的代码没有按我希望的顺序运行,但我不知道。我被困在这里好几天了。救命啊 下面是创建学生的路线处理 编辑: 我几乎完全通过重构这里的东西来实现它。我正在创建一个学生文档并保存它,然后将该文档推送到父对象上的数组中。这是愚蠢的,有两个原因。第一,它

我正在开发一个应用程序,如果家长用户需要创建一个学生对象,家长用户和教师用户都可以访问该对象。除了这件事,一切正常。当父用户创建学生时,它将重定向到用户的仪表板,新创建的学生将显示在该仪表板上。但是,在我注销并重新登录之前,该学生不会显示。我假设这是因为我的代码没有按我希望的顺序运行,但我不知道。我被困在这里好几天了。救命啊

下面是创建学生的路线处理

编辑: 我几乎完全通过重构这里的东西来实现它。我正在创建一个学生文档并保存它,然后将该文档推送到父对象上的数组中。这是愚蠢的,有两个原因。第一,它没有在时间上正确显示。第二,如果我想更新学生,我需要在多个实例中更新它。在这里,我创建文档并添加对父对象上数组的引用。现在,当我编辑/删除一个学生时,我在一个地方进行编辑/删除,并且运行在
“users/:id”
路径中的
student.findById()
可以立即访问
ObjectID。以下是我的更新代码:

CREATE STUDENT
        router.post("/users/:id/createStudent", middleware.isLoggedIn, function(req, res){
          const firstName = req.body.firstName,
          lastName = req.body.lastName,
          age = req.body.age,
          instrument = req.body.instrument,
          parent = {
                  id: req.user._id,
                  username: req.user.username
                },
          newStudent = {
                  firstName: firstName,
                  lastName: lastName,
                  age: age,
                  instrument: instrument,
                  parent: parent
                }
        Student.create(newStudent,  function(err){
            if(err){
                    console.log(err);
                    req.flash("error", "error")
            } else {
                    res.redirect("/users/:id")     
                    }
                })        
    });
和仪表板模板:

<%- include ("../partials/header") %>


// 
code for teachers exists here
//

<% } else if(user.isTeacher === false) {%>
<h1 class="ui huge header"><%= user.username%>'s Dashboard</h1>
<h2 class="ui big header">Here are your students:</h2>
<% if(students.length === 0) {%>
    <p>Oops! Looks like you haven't registered a student. <a href="/users/<%= user._id %>/createStudent">You can do that here.</a> </p>
<% } else { %>
    <div class="ui relaxed divided list">
        <% students.forEach(function(student){ %>
            <div class="item">
                <div class="content">
                    <%= student.firstName %> <%= student.lastName %> 
                    <ul>
                        
                        <li>
                            <a  class="ui secondary mini basic button" 
                                id="assignments" 
                                href="/student/<%= student._id%>">
                                    <%= student.firstName %>'s Assignments
                            </a>
                            <form action="/student/<%= student._id %>?_method=DELETE" method="POST">
                                <button class="ui negative mini basic button" id="assignments">
                                    Remove Student
                                </button>
                            </form>
                        </li>
                    </ul>
                </div>
            </div>
            <% }) %>
        <p><a href="/users/<%= user._id %>/createStudent">Add a new student.</a></p>
    </div>
<% } %>
<%}%>
</div>
</div>
<%- include ("../partials/footer") %>

问题可能是,当教师点击页面时,您正在拖动教师的“配置文件”,但在创建学生对象时,您没有对其进行调整/更新/重新绘制。这就是为什么它只在重新加载页面后才存在。我建议将该对象直接添加到您拥有的教师配置文件(currentUser.students)中,除非其中有在客户端上不可用的数据。如果是这样的话,那么将最终的对象发送回客户端,并从中进行调整。好吧,我听到你说我应该做一些事情来刷新模板中的配置文件,这样当页面呈现时,我不是在使用旧数据,而是在使用更新的版本?这就是我的意思。虽然我越看你的学生创作逻辑,我的问题就越多。我认为你的函数中缺少了一些逻辑。您将函数视为应该启动然后执行某项操作,但是您的整个函数没有标记为异步,并且您没有为函数返回任何值。你能提供更多关于
学生
课程的内容吗?谢谢你的帮助。如果你说不出来,我真的是个新手。我为学生班添加了模型以供参考。用户有一个名为“isTeacher”的布尔值,默认设置为false。如果isTeacher===false,则登录的用户是父用户。当家长创建学生时,该学生将被推入父对象上的数组中,他们应该能够查看老师为该学生创建的作业。因此,学生会得到一个空的作业数组,老师有权填写,家长有权查看。return
user.save()
,否则它不会成为你承诺链的一部分(可能还会发生其他问题,但会弹出一个问题)
    const mongoose = require("mongoose"), 
        Schema = mongoose.Schema;

const StudentSchema= new Schema({
    firstName: String,
    lastName: String,
    age: String,
    instrument: String,
    assignments: [
         { id: {
            type: mongoose.Schema.Types.ObjectId,
            ref:"Assignment"
         },
         title: String
        }     
    ],
    parent: {
        id: {
            type: mongoose.Schema.Types.ObjectId,
            ref: "User"
        },
        username: String
    },
    teacher: [{
        id: {
            type: mongoose.Schema.Types.ObjectId,
            ref:"User"
        },
        username: String
    }]
});

const Student = mongoose.model("student", StudentSchema);

module.exports = Student;