req.payload.reps + number
andのこの広範なリストを必要とせずに、スキーマに渡されたデータの数に応じてそれらの名前で自動インクリメントreq.payload.kilos + number
する単一のペアを持つように、次のように書くにはどうすればよいでしょうか?req.payload.reps - req.payload.kilos
また、カウンターを使用してフィールドのname
属性をインクリメントしない場合、との値はデータベースに 2 つの配列として格納されます。後で対応する値を一致させる方が簡単ですか、それとも事前に尋ねたようにスキーマを設定する方が理にかなっていますか?input
reps
kilos
req.payload.reps[i]
たとえば、次のようなものがあります。そうすれば、ユーザーがこれらの入力フィールドに 10 未満の値を送信する場合、空のオブジェクトをデータベースに投稿せず、ユーザーはスキーマ形式を維持することで、必要な数の入力値を送信できます。
hapijs
サーバー側で使用しています。
私のルーター機能:
var sendWorkout = {
handler: function(req, reply){
var d = new Date();
var cd = d.getDate() + "-" + (d.getMonth()+1) + "-" + d.getFullYear();
console.log(req.payload);
// sets schema for workout
// this needs to be the data from the form and then should be validated with joi!!!
var workoutSchema = {
// "personId": "personId", //to later be replaced with actual username
"date": cd,
"workout": [
{
"exercise": req.payload.exercise,
"musclegroup": req.payload.musclegroup,
"sets": [
{
"reps": req.payload.reps,
"kilos": req.payload.kilos
},
{
"reps": req.payload.reps1,
"kilos": req.payload.kilos1
},
{
"reps": req.payload.reps2,
"kilos": req.payload.kilos2
},
{
"reps": req.payload.reps3,
"kilos": req.payload.kilos3
},
{
"reps": req.payload.reps4,
"kilos": req.payload.kilos4
},
{
"reps": req.payload.reps5,
"kilos": req.payload.kilos5
},
{
"reps": req.payload.reps6,
"kilos": req.payload.kilos6
},
{
"reps": req.payload.reps7,
"kilos": req.payload.kilos7
},
{
"reps": req.payload.reps8,
"kilos": req.payload.kilos8
},
{
"reps": req.payload.reps9,
"kilos": req.payload.kilos9
},
{
"reps": req.payload.reps10,
"kilos": req.payload.kilos10
},
]
}
]
};
// defines unique key for data
var key = cd + req.payload.exercise;
console.log(key);
// adds payload to database
db.add(key, workoutSchema, function(error, results){
if (error) {
console.log("Coushbase error: " + error);
reply(error + "\n");
}
console.log(results);
reply(workoutSchema);
});
}
};
input
フィールドのにカウンターを追加する私のjQuery name
:
$(document).ready(function() {
console.log('Document ready');
var counter = 0;
// function to add sets to specific exercise
$('#add-set').on('click', function() {
console.log ('Button add-set clicked');
counter += 1;
console.log(counter);
var htmlSets = '<div class="sets">' +
'<label for="reps" class="labels">Reps</label><input type="text" name="reps' + counter +'" class="reps-column" placeholder="How many reps?" />' +
'<label for="kilos" class="labels">Kg\'s</label><input type="text" name="kilos' + counter +'" class="kilos-column" placeholder="How much Kg?" />' +
'</div>';
$('div.sets:last').append(htmlSets);
});
});
そして私のHTML:
<div id="forms">
<form id="workout-form" name="workout-form" action="newworkout/workout" method="POST" enctype="application/x-www-form-urlencoded">
<div class="workouts">
<label for="exercise" class="labels"><strong>Exercise</strong></label> <input type="text" name="exercise" id="exercise" placeholder="Which exercise?" autofocus />
<label for="musclegroup" class="labels"><strong>Muscle-Group</strong></label> <input type="text" name="musclegroup" id="musclegroup" placeholder="Which muscle-group?" />
<div class="sets">
<label for="reps" class="labels">Reps</label> <input type="text" name="reps" class="reps-column" placeholder="How many reps?" />
<label for="kilos" class="labels">Kg's</label> <input type="text" name="kilos" class="kilos-column" placeholder="How much Kg?" />
</div>
<hr>
</div>
<button id="add-set"class="add-buttons" type="button"><i class="fa fa-plus-circle fa-2x"></i></button>
<button id="submit-workout" type="submit"><strong>Save Workout</strong></button>
</form>
</div>
</main>