Использую бд mysql. Думаю может на mongodb перейти для тестирование, слишком много нюансов тут, что не получается реализовать тесты.
Как я реализовал все это
const Router = require('koa-router'),
User = require('./model/user'),
Test = require('./model/test'),
router = new Router();
router.get('/testing/:id', async ctx => {
let theme = await Test.theme(ctx.params.id);
let test = await Test.test(ctx.params.id);
let answearArr = await Promise.all(test.map(item => {
return Test.answear(item.id);
})).then(id => id);
await ctx.render('test', {
title: 'Тест',
path: 'test',
thema: theme[0],
test: test,
answear: answearArr,
})
})
Который получаю следующие данные
testtest
[ 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 } ] ]
В моделях
let Test = {
test: function(id){
return requestTest('SELECT * FROM questions WHERE id_theme = ?', id);
},
answear: function(id){
return new Promise((resolve, reject) => {
db.query(
`SELECT * FROM answers WHERE id_question IN (?)`,
id,
(err, rows) => {
if(err) reject(err);
resolve(rows);
});
}).then(rows => {return rows;});
},
theme: function(id){
return requestTest('SELECT name FROM thema WHERE id = ?', id);
}
};
function requestTest(sql, req) {
return new Promise((resolve, reject) => {
db.query(
sql,
[req],
(err, rows) => {
if(err) reject(err);
resolve(rows);
});
});
}
module.exports = Test;
Но в pug нужно чтобы примерно так, только выводило все не в таких форматах [0][1], [0][2] и так далее. К Каждому вопросу свои ответы
include layout
.container
h1=thema.name
p=test[0].name
ul
li
- console.log(test)
input(type='radio' name=test[0].id)
| #{answear[0][0].text}
li
input(type='radio' name=test[0].id)
| #{answear[0][1].text}
li
input(type='radio' name=test[0].id)
| #{answear[0][2].text}
p=test[1].name
ul
li
input(type='radio' name=test[1].id)
| #{answear[1][0].text}
li
input(type='radio' name=test[1].id)
| #{answear[1][1].text}
li
input(type='radio' name=test[1].id)
| #{answear[1][2].text}
p=test[2].name
ul
li
input(type='radio' name=test[2].id)
| #{answear[2][0].text}
li
input(type='radio' name=test[2].id)
| #{answear[2][1].text}
li
input(type='radio' name=test[2].id)
| #{answear[2][2].text}