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,则登录的用户是父用户。当家长创建学生时,该学生将被推入父对象上的数组中,他们应该能够查看老师为该学生创建的作业。因此,学生会得到一个空的作业数组,老师有权填写,家长有权查看。returnuser.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;