我一直试图在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 回答
我尝试在MEAN模板中重新创建您的应用程序,但我看不到您的用户功能,所以如果我遗漏了任何内容并且我可以编辑,请告诉我 .
首先,我没有看到你在req.body中传递用户ID的位置 . 我会在Angular控制器的请求中包含用户对象:
然后在服务器控制器中,您可以以对象格式定义新对象,以正确分配所有变量 . 如果你已经拥有了整个用户对象,则不需要调用findOne函数,但如果没有,我会像这样构造它:
希望这有帮助,让我知道我可能缺少什么,我可以编辑 .
我一直在研究无济于事 . 事实上,我需要做的是以某种方式将问题对象放入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',问题:[]}'用户'