Как реализовать тесты я не разу не делал, попробовал сделать это впервый раз. Я реализовал примерно вывод из mysql массивы вопросов, ответов и правильных ответов, но у меня проблема в том что вывести не получается. Шаблонизатор использую pug. У меня такая архитектура в бд. Тема, вопросы, ответы(и там же хранятся правильные ответы). ТО есть справа налево такая связь имеет Тема->Вопросы->Ответы Только то что я получил массив ответов я не могу их вывести на экран нормально Моя реализация
const Router = require('koa-router'),
User = require('./model/user'), //Хранятся запросы в таблицу User
Test = require('./model/test'), //Хранятся запросы в таблицу Test
router = new Router();
router.get('/testing/:id', async ctx => {
/** Создаю пустые массивы для ответов и правильных ответов*/
let answearArr = [];
let answerCorrectArr = [];
let theme = await Test.theme(ctx.params.id); // Получаю название темы по id страницы
let test = await Test.test(ctx.params.id); // Получаю все вопросы, где тема = id
for(i=0; i < test.length; i++){
let answear = test[i].id;
answearArr.push(await Test.answear(answear)); // Делаю выборку и помещаю каждый ответ в массив ответов
}
for(i=0; i < answearArr.length; i++){
let arr = answearArr[i]; // делаю выборку ответов на вопросы в массиве
for(n=0; n < arr.length; n++){
let arr1 = arr[n]; // Выбираю каждый ответ отдельный
if(arr1.answer === 1){
answerCorrectArr.push(arr1.id); //помещаю в массив правильных ответов id данного ответа
}
}
}
await ctx.render('test', {
title: 'Тест',
path: 'test',
thema: theme[0],
test: test,
answear: answearArr,
})
})
В pug файле test
include layout
.container
h1=thema.name
for question in test
p=question.name
for answearTest in answear
ul
li
input(type='radio' name=answearTest)
| #{answearTest[0].text} // Вот тут/Когда мне нужно выбрать ответы на 1 вопрос
В массивах хранятся следующие данные В переменной test
[ RowDataPacket {
id: 1,
name: 'Первый вопрос',
id_theme: 1 },
RowDataPacket {
id: 2,
name: 'Второй вопрос',
id_theme: 1 },
RowDataPacket {
id: 4,
name: 'Третий вопрос',
id_theme: 1 } ]
answearArr
[ [ RowDataPacket { id: 1, text: 'один-два дня', id_question: 1, answer: 1 },
RowDataPacket { id: 2, text: 'более 5 дней', id_question: 1, answer: 0 },
RowDataPacket { id: 3, text: '3-5 дней', id_question: 1, answer: 0 } ],
[ RowDataPacket { id: 4, text: 'да', id_question: 2, answer: 1 },
RowDataPacket { id: 5, text: 'нет', id_question: 2, answer: 0 },
RowDataPacket {
id: 6,
text: 'не постоянно, Меняется постоянно',
id_question: 2,
answer: 0 } ],
[ RowDataPacket { id: 7, text: 'да', id_question: 4, answer: 0 },
RowDataPacket { id: 8, text: 'нет', id_question: 4, answer: 0 },
RowDataPacket { id: 9, text: 'не помню', id_question: 4, answer: 1 } ] ]
answerCorrectArr
[ 1, 4, 9 ]
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости