Как из клиентской части перекинуть переменную в серверную часть?
Мне нужна рандомная генерация вопросов в одном .js файле, чтоб потом в нем же по id проверять input checkbox и в конце выводить результат. А для быстроты вывода вопросов использую .handlebars. В общем, мне нужно сделать тест.
На всякий случай server.js
const express = require("express"),
app = express(),
exphbs = require("express-handlebars");
const routes = require("./routes/index");
app.listen(3000);
app.use(express.static("public"));
app.engine(
"handlebars",
exphbs({
defaultLayout: "main",
})
);
app.set("view engine", "handlebars");
app.use("/", routes);
У меня есть data.json файл с вопросами (их больше на самом деле, на 1000)
(data = [
{
"ids": "1",
"question": "Правила технической эксплуатации железной дороги в Республике Беларусь устанавливают:",
"answers": [
"требования к организации функционирования, обслуживанию",
"технической эксплуатации сооружений и устройств железнодорожного транспорта",
"требования по сигнализации на железнодорожном транспорте",
"технологические процессы организации движения поездов, их приема и отправления, работы диспетчера поездного, маневровой работы на железнодорожных станциях",
"порядок (регламент) переговоров и действий работников железнодорожного транспорта при поездной и маневровой работе"
],
"correct": [1, 2, 3, 4]
},
{
"ids": "2",
"question": "Правила технической эксплуатации железной дороги в Республике Беларусь обязательны для выполнения:",
"answers": [
"всеми организациями, выполняющими работы (оказывающие услуги) для пользователей железнодорожного транспорта",
"индивидуальными предпринимателями, выполняющими работы (оказывающие услуги) для пользователей железнодорожного транспорта",
"всеми работниками железнодорожного транспорта"
],
"correct": [1, 2, 3]
},
Я его открываю в своем public/js/app.js и делаю рандом вопросов
var mydata = JSON.parse(JSON.stringify(data));
//let ses = document.getElementById("1");
let questi = []; // <------- это должно отправляться в index.js
for (let i = 0; i <= 2; i++) {
questi[i] = mydata[Math.floor(Math.random() * mydata.length)];
}
console.log(questi);
Но не знаю как questi отправить в routes/index.js
const express = require("express"),
fs = require("fs"),
router = express.Router();
router.get("/", function (req, res) {
res.render("test", {
style: "main",
quests: questi, // <------------- как-то открыть редактированный json из app.js тут
});
});
module.exports = router;
Возможно ли как-то по-другому это все сделать, чтоб мой test.handlebars легко мог принимать значения
{{#each quests}}
<div id={{ids}}>
<ul>
<h3>{{question}}</h3>
{{#each answers }}
<li><input type="checkbox" id={{../ids}}_{{@key}} value="{{@key}}">{{.}}</li>
{{/each}}
<hr>
</ul>
</div>
{{/each}}
<p>Отвечено:</p>
И на всякий случай main.handlebars
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>{{title}}</title>
<link rel="stylesheet" href="/css/{{style}}.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
<body>
{{{body}}}
</body>
<script type="text/javascript" src="data.json"></script>
<script type="text/javascript" src="js/app.js"></script>
</html>
Ответы (1 шт):
Можно сделать fetch-POST-json в конце опросника на какой-то специальный роут.
А правильные ответы хранить в другом json.