req.payload.reps + number
및 req.payload.kilos + number
의 광범위한 목록이 필요없고 req.payload.reps - req.payload.kilos
의 단일 쌍이 있지만 스키마에 전달 된 데이터의 수에 따라 자동 증가하는 방법은 다음과 같습니다. 그 이름들? 나는 input
필드의 name
속성을 증가하는 카운터를 사용하지 않는 경우hapijs 자동 증가 페이로드 인덱스
은 또한, 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