首页 文章

调查MEAN - 将id和输入发布到控制器以使用关联的模式进行创建

提问于
浏览
0

我一直试图在MEAN中制作一个调查应用程序 . 我有两个模式,用户和调查,他们是一对多关联 . 我的问题是从'create'html到客户端控制器,我想传递用户id和输入(findOne查询所需的id) . 我认为是同一个'new_survey'对象的一部分 . 最后,我想在user.question数组中进行调查 . 我觉得我有点困惑,因为我用google搜索/堆栈溢出了这几天,似乎无法搞清楚 . 并且,new_survey工作正常,但不与手头的用户关联 . (用户从$ scope.user获取)

html--

<h3>Put the question and options here:</h3>
Name: {{user}}<span></span><br><br>
Question:<input type='text' ng-model='new_survey.question'>
Option 1:<input type='text' ng-model='new_survey.opt_1'>
Option 2:<input type='text' ng-model='new_survey.opt_2'>
Option 3:<input type='text' ng-model='new_survey.opt_3'>
Option 4:<input type='text' ng-model='new_survey.opt_4'><br>

<button><a href='#/dashboard' ng-click="create(new_survey)">Add Survey</a></button>

客户控制器 -

$scope.create = function(new_survey){
        console.log(new_survey, "new_survey into the client controller"); //
    SurveyFactory.create(new_survey, function(survey){
        //console.log(survey, "callback client controller" ); //
    getAllUsers();
    });
};

厂 -

factory.create = function(info, callback){
        console.log(info, 'info in factory');
    $http.put('/surveys', info).success(function(rtnd_data){
            console.log(rtnd_data, 'create survey rtn data'); //
        callback(rtnd_data);
    }); 
};

routes--

app.put('/surveys', function (req,res){
    console.log(req.body, "req.body routes"); //
    survey.addquestion(req,res);
});

服务器控制器

addquestion: function(req,res){
//console.log(req.body, 'req.body'); //same w/ user obj as survey id
//console.log(req.body.id, 'req.body.id'); //survey id = whole user
var question = new Surveys({
   question: req.body.question,
   opt_1: req.body.opt_1,
   opt_2: req.body.opt_2,
   opt_3: req.body.opt_3,
   opt_4: req.body.opt_4,
   _user: req.body.id._id
});

var newQuestion = [question]; //obj in array
    console.log(newQuestion, 'newQuestion'); //is an obj, not array

var  user = req.body.id; //right! user obj
    console.log(user, 'user');

user.questions.push(newQuestion);

var newUser = newQuestion; console.log(newUser,'newUser'); //不正确的模特 -

var SurveySchema = mongoose.Schema({
question: String,
opt_1: String,
opt_2: String,
opt_3: String,
opt_4: String,
date_entered: { type: Date, default: Date.now },
_user: {type: Schema.Types.ObjectId, ref: 'User'}
});

mongoose.model('Surveys', SurveySchema);

var UserSchema = mongoose.Schema({
    name: String,
    questions: [{type: Schema.Types.ObjectId, ref: 'Surveys'}]
});

mongoose.model('User', UserSchema);

非常感谢 :)

更新后的控制器功能---

addquestion: function(req,res){
    //console.log(req.body, 'req.body'); //same w/ user obj as survey id
    //console.log(req.body.id, 'req.body.id'); //survey id = whole user
    var question = new Surveys({
        question: req.body.question,
            opt_1: req.body.opt_1,
            opt_2: req.body.opt_2,
            opt_3: req.body.opt_3,
            opt_4: req.body.opt_4,
            _user: req.body.id._id
            });
        //console.log(question, 'question'); //correct survey
        //console.log(req.body.id.questions, 'req.body.id.questions'); //empty array - correct inside survey
        var newQuestions = req.body.id.questions; //obj in array
            //console.log(newQuestions, 'newQuestions'); //survey in array in user
            user = req.body.id; //right! user obj
            //console.log(user, 'user');
        var newUser = newQuestions.push(question);
            console.log(newUser, 'newUser'); //not right

        User.findOne().update({_id: user._id}, newUser)
            question.save(function(err){
                if(err)
            {
              console.log("error");
            }
            else
            {
              res.send({status: "success"});
            }
          })
    },

服务器控制台

[ { question: 'ujh',
opt_1: 'bkjhnkjhnhk',
opt_2: 'jkjbn',
opt_3: 'kjhn',
opt_4: 'kjn',
_user: 55cd4a486c73ebf02e3e4334,
_id: 55cd5c123c9d69ae41a700da,
date_entered: Thu Aug 13 2015 20:10:10 GMT-0700 (PDT) } ] 'newQuestion'

{_v:0,名称:'Sam', id:'55cd4a486c73ebf02e3e4334',问题:[]}'用户'

[ { question: 'ujh',
    opt_1: 'bkjhnkjhnhk',
    opt_2: 'jkjbn',
    opt_3: 'kjhn',
    opt_4: 'kjn',
    _user: 55cd4a486c73ebf02e3e4334,
    _id: 55cd5c123c9d69ae41a700da,
    date_entered: Thu Aug 13 2015 20:10:10 GMT-0700 (PDT) } ] 'newUser'

{}'req in show,routes'

[ { _id: 55ae7aaea5e270ae6494704d,
    name: 'Sam',
    __v: 0,
questions: [] },

{id:55ae97f6a73fa44868b9d0b3,名称:'Sam',_ v:0,问题:[]},{_ id:55cd4a486c73ebf02e3e4334,名称:'Sam',__ v:0,问题:[]}]

2 回答

  • 0

    我尝试在MEAN模板中重新创建您的应用程序,但我看不到您的用户功能,所以如果我遗漏了任何内容并且我可以编辑,请告诉我 .

    首先,我没有看到你在req.body中传递用户ID的位置 . 我会在Angular控制器的请求中包含用户对象:

    $scope.create = function(new_survey){
                    new_survey.id = $scope.user; //Assign the User to the request object
                    console.log(new_survey, "new_survey into the client controller"); 
                    $scope.Factorycreate(new_survey, function(survey){
                        //console.log(survey, "callback client controller" ); 
                        getAllUsers();
                    });
                };
    

    然后在服务器控制器中,您可以以对象格式定义新对象,以正确分配所有变量 . 如果你已经拥有了整个用户对象,则不需要调用findOne函数,但如果没有,我会像这样构造它:

    var question = new Surveys({
           question: req.body.question,
           opt_1: req.body.opt_1,
           opt_2: req.body.opt_2,
           opt_3: req.body.opt_3,
           opt_4: req.body.opt_4,
           _user: req.body.id._id
       });
       //console.log(question, 'question'); //correct survey
       //console.log(req.body.id.questions, 'req.body.id.questions'); //empty array - correct inside survey
       var newQuestions = [question]; //obj in array
       //console.log(newQuestions, 'newQuestions'); //survey in array in user
      var  user = req.body.id; //right! user obj
       //console.log(user, 'user');
       newQuestions.push(question);
       var newUser = newQuestions
       console.log(newUser, 'newUser'); //not right
       User.findOne().update({_id: user._id}, newUser)
       question.save(function(err){
           if(err)
           {
               console.log("error");
           }
           else
           {
               res.send({status: "success"});
           }
    

    希望这有帮助,让我知道我可能缺少什么,我可以编辑 .

  • 0

    我一直在研究无济于事 . 事实上,我需要做的是以某种方式将问题对象放入user.questions(嵌套)数组中 . 我相信我实际上推了一个对象 . 我会继续寻找同一时间 . 感谢您的帮助 .

    {问题:'ghcvgf',opt_1:'jugjh',opt_2:undefined,opt_3:undefined,opt_4:undefined,user:55cd4a486c73ebf02e3e4334,id:55cd5594cb6784d93afe486d,date_entered:Thu Aug 13 2015 19:42:28 GMT-0700(PDT) }'问题'{ v:0,名称:'Sam',_ id:'55cd4a486c73ebf02e3e4334',问题:[]}'用户'

相关问题