Как я могу написать следующее, так что мне не нужен этот обширный список req.payload.reps + number
и req.payload.kilos + number
и имеет одну пару req.payload.reps - req.payload.kilos
, но это число увеличивается в зависимости от количества данных, переданных в схему с эти имена?hapijs индекс инкремента hapijs
Кроме того, если я не использовать счетчик, чтобы увеличить атрибут input
поля name
, значение 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);
});
}
};
Мой JQuery, который добавляет счетчик к input
этого месторождения 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>
Эй, @hyprstack, вы попробовали мое предложение? – John