前提・実現したいこと
Express,Mongooseを用いて、簡単なクイズアプリを作っています。
複数の回答(2つ)をPOSTする機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
Answer validation failed: number: Cast to Number failed for value "[ '1', '2' ]" at path "number"
該当のソースコード
pugを用いて、クイズおよび選択肢を表示させています。
pug
1form(method='POST' action='') 2 3 each question in question_list 4 li #{question.name} 5 | #{question.content} 6 div.form-group 7 label(for='number') 8 input#number.form-control(type='hidden', name='number' value=question.name) 9 label(for='answer_choice') 10 input#answer_choice.form-control(type="radio" name='answer_choice', value='1', required='true') 11 #{question.choice1} 12 input#answer_choice.form-control(type="radio" name='answer_choice', value='2', required='true') 13 #{question.choice2} 14 input#answer_choice.form-control(type="radio" name='answer_choice', value='3', required='true') 15 #{question.choice3} 16 input#answer_choice.form-control(type="radio" name='answer_choice', value='4', required='true') 17 #{question.choice4} 18 .submit 19 button.btn.btn-primary(type='submit') Submit 20
クイズの内容は以下のコードにてmLab(mongodb)にあがっています。現在はクイズは2問あります。
JavaScript
1var mongoose = require('mongoose'); 2 3var Schema = mongoose.Schema; 4 5var questionSchema = new Schema( 6 { 7 name: {type: Number, required: true}, 8 content: {type: String, required: true}, 9 choice1: {type: String, required: true}, 10 choice2: {type: String, required: true}, 11 choice3: {type: String, required: true}, 12 choice4: {type: String, required: true}, 13 } 14 15); 16 17//export model 18module.exports = mongoose.model('Question', questionSchema)
回答は以下のスキーマで管理しています。
JavaScript
1var mongoose = require('mongoose'); 2 3 4var Schema = mongoose.Schema; 5 6var AnswerSchema = new Schema( 7 { 8 number: {type: Number, required: true }, 9 answer_choice: {type: Number, required: true } 10} 11 12); 13 14 15//export model 16module.exports = mongoose.model('Answer', AnswerSchema) 17
回答のPOSTは以下のコードで行います。
JavaScript
1exports.answer_create_post = function(req, res, next) { 2 // Create an Answer object 3 var answer = new Answer( 4 { 5 number: req.body.number, 6 answer_choice: req.body.answer_choice 7 } 8 ); 9 answer.save(function (err){ 10 if (err) { return next(err); } 11 res.send('NOT IMPLEMENTED: Answer POST'); 12 }); 13 };
試したこと
8つ(4×2)のラジオボタンは一つしか押せないので、全てanswer_choiceとして認識されているのだと思うのですが、answer_choiceをqustion.nameに変えてしまうと以下のようなエラーが出てしまいます。
Answer validation failed: number: Cast to Number failed for value "[ '1', '2' ]" at path "number", answer_choice: Path `answer_choice` is required.
補足情報
プログラミングを始めたばかりで、基本的な知識が足りておらず、質問の仕方もいまいちわかっておりませんが、ご教示いただけると大変助かります。
なお、このアプリはMozillaのこちらのチュートリアルを参考にしております。
リンク内容
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/10 11:19