Задать вопрос
@hollanditkzn

Как построить тестирование из бд?

Использую бд 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,
        })
    })

Который получаю следующие данные
test
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 } ] ]

В моделях
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}
  • Вопрос задан
  • 59 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы