2017-04-12 62 views
0

这些都是我的两个原理图进行讨论和回复:Mongoose和node.js,填充并保存在数据库中?

Source code for the two schematics

const mongoose = require('mongoose'); 
const ObjectID = mongoose.Schema.Types.ObjectId; 

let discussionSchema = mongoose.Schema({ 
    title: {type: String, required: true}, 
    content: {type: String}, 
    author: {type: ObjectID, required: true, ref: 'User'}, 
    date: {type: Date, default: Date.now()}, 
    reply: [{ type: ObjectID, ref: 'Replying' }] 
}); 

let discussionReplyingSchema = mongoose.Schema({ 
    content: {type: String, required: true}, 
    author: {type: mongoose.Schema.Types.ObjectId, required: true, ref: 'User'}, 
    date: {type: Date, default: Date.now()} 
}); 

const Discussion = mongoose.model('Discussion', discussionSchema); 
const Replying = mongoose.model('Replying', discussionReplyingSchema); 

module.exports = Discussion; 
module.exports = Replying; 

这是在我的控制器:

Source code for the controller

replyPost: (req, res) => { 
     console.log(req.body); 
     let id = req.params.id; 
     let replyContent = req.body.replyContent; 
     console.log(replyContent); 

    } 

我试图让登录用户和他的回复(作为字符串),并将其保存在猫鼬数据库中,以便我可以在当前显示它讨论。

这就是数据库是如何现在:

“答复”:[],

任何想法如何,我可以做到这一点?

+0

如果您将代码放入问题中,而不是链接到图像,它将会更有用。 – Michael

+0

我对此造成的不便表示抱歉,Michael在这里是原理图:编辑:其实我不能说它太长,对不起。 – shefasf

+0

你可以编辑问题并添加代码吗? – Michael

回答

0

所以这个问题不在你在这里发布的代码中。问题开始于details.hbs POST缺少id的'讨论'对象。

<form class="form-horizontal" method="POST" action="/discussion/details/{{discussion.id}}"> 

我发现的下一个问题是用户对象没有被填充在讨论细节上。我更新了要使用的详细控制器:

details: (req, res) => { 
     let id = req.params.id; 

     Discussion.findById(id).populate('author').then(discussion => { 
      if (!req.user) { 
       res.render('discussion/details', {discussion: discussion, isUserAuthorized: false}); 
       return; 
      } 

      let isUserAuthorized = req.user.isAdmin || req.user.isAuthorDiscussion(discussion); 
      res.render('discussion/details', {user: req.user, discussion: discussion, isUserAuthorized: isUserAuthorized}) 
     }); 

    }, 
+0

我不会认为有一个错误,很好的捕获。现在最后一件事是什么想法如何保存答复,并获得当前登录的用户在“replyPost”? – shefasf

+0

当前用户应该在replyPost中,如果您按照我在详细功能中所做的更改。至于保存,您应该能够遵循您在项目其他部分使用的相同模式。 – Michael

+0

所以我只需要保存内容中的文本,让用户保存在原理图中,而不仅仅是在HTML中调用回复权限? – shefasf