web应用session制作答题界面
时间: 2023-09-02 14:13:15 浏览: 46
好的,以下是使用 session 实现的答题界面的示例代码:
```javascript
const express = require('express');
const session = require('express-session');
const app = express();
app.use(express.urlencoded({ extended: true }));
app.use(session({
secret: 'mysecret',
resave: false,
saveUninitialized: true,
}));
app.get('/quiz', (req, res) => {
// 检查 session 中是否已经保存了答案
const answered = req.session.answered || [];
// 定义两个问题和答案
const questions = [
{
id: 1,
text: '2 + 2 = ?',
options: [
{ text: '3', value: false },
{ text: '4', value: true },
{ text: '5', value: false },
],
},
{
id: 2,
text: '5 - 3 = ?',
options: [
{ text: '2', value: true },
{ text: '3', value: false },
{ text: '4', value: false },
],
},
];
// 检查哪些问题已经回答过了
const unanswered = questions.filter(q => !answered.includes(q.id));
// 如果所有问题都已经回答过了,显示一个消息
if (unanswered.length === 0) {
res.send('你已经回答过所有问题了!');
return;
}
// 获取下一个需要回答的问题
const question = unanswered[0];
// 显示问题和选项
let html = `<p>${question.text}</p>`;
html += '<form method="post">';
for (const option of question.options) {
html += `<input type="radio" name="answer" value="${option.value}"> ${option.text}<br>`;
}
html += `<input type="hidden" name="questionId" value="${question.id}">`;
html += '<input type="submit" value="提交">';
html += '</form>';
res.send(html);
});
app.post('/quiz', (req, res) => {
// 获取用户提交的答案
const answer = req.body.answer;
// 检查 session 中是否已经保存了答案
const answered = req.session.answered || [];
// 将这个问题的 ID 添加到已回答列表中
const questionId = req.body.questionId;
answered.push(questionId);
// 将答案保存在 session 中
req.session.answered = answered;
// 重定向到下一个问题页面
res.redirect('/quiz');
});
app.listen(3000, () => {
console.log('Server started on port 3000');
});
```
与使用 cookie 的代码类似,这个例子使用了两个路由:
- `GET /quiz`:显示答题界面。
- `POST /quiz`:处理用户提交的答案,并将答案保存在 session 中。
与 cookie 不同的是,session 的数据保存在服务器端,而不是在客户端。因此,我们需要使用 `express-session` 中间件来管理 session。在这个例子中,我们使用了一个名为 `mysecret` 的字符串作为 session 的密钥。
启动应用程序并访问 `http://localhost:3000/quiz` 来查看结果。