html
html
html
html
html
题目标题
题目类型
操作
javascript
const express = require('express');
const app = express();
const bodyParser = require('body-parser');
app.use(bodyParser.json());
const users = [];
app.post('/api/register', function(req, res) {
const { username, password } = req.body;
const newUser = { id: Date.now(), username, password };
users.push(newUser);
res.json({ message: '注册成功', user: newUser });
});
app.post('/api/login', function(req, res) {
const { username, password } = req.body;
const user = users.find(u => u.username === username && u.password === password);
if (user) {
res.json({ message: '登录成功', user });
} else {
res.status(401).json({ message: '用户名或密码错误' });
}
});
const port = 3000;
app.listen(port, function() {
console.log(`服务器运行在端口 ${port}`);
});
javascript
const questions = [];
app.post('/api/admin/questions', function(req, res) {
const { title, type, content } = req.body;
const newQuestion = { id: Date.now(), title, type, content };
questions.push(newQuestion);
res.json({ message: '题目添加成功', question: newQuestion });
});
app.get('/api/questions', function(req, res) {
res.json(questions);
});
app.get('/api/questions/:id', function(req, res) {
const question = questions.find(q => q.id === parseInt(req.params.id));
if (question) {
res.json(question);
} else {
res.status(404).json({ message: '题目未找到' });
}
});
app.put('/api/admin/questions/:id', function(req, res) {
const questionIndex = questions.findIndex(q => q.id === parseInt(req.params.id));
if (questionIndex!== -1) {
const { title, type, content } = req.body;
questions[questionIndex] = { id: questions[questionIndex].id, title, type, content };
res.json({ message: '题目修改成功', question: questions[questionIndex] });
} else {
res.status(404).json({ message: '题目未找到' });
}
});
app.delete('/api/admin/questions/:id', function(req, res) {
const questionIndex = questions.findIndex(q => q.id === parseInt(req.params.id));
if (questionIndex!== -1) {
questions.splice(questionIndex, 1);
res.json({ message: '题目删除成功' });
} else {
res.status(404).json({ message: '题目未找到' });
}
});
javascript
app.post('/api/answer', function(req, res) {
const { questionId, answer } = req.body;
const question = questions.find(q => q.id === parseInt(questionId));
if (question) {
// 这里假设答案正确判断逻辑
const isCorrect = true;
const answerRecord = { questionId, answer, isCorrect };
// 存储答题记录到数据库(这里简化为数组)
const answerRecords = [];
answerRecords.push(answerRecord);
res.json({ message: '答题结果记录成功', isCorrect });
} else {
res.status(404).json({ message: '题目未找到' });
}
});
javascript
app.get('/api/wrongQuestions', function(req, res) {
const wrongQuestions = [];
answerRecords.forEach(record => {
if (!record.isCorrect) {
const question = questions.find(q => q.id === record.questionId);
if (question) {
wrongQuestions.push(question);
}
}
});
res.json(wrongQuestions);
});
sql
CREATE TABLE users (
user_id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(255) NOT NULL,
password VARCHAR(255) NOT NULL,
registration_time DATETIME DEFAULT CURRENT_TIMESTAMP
);
sql
CREATE TABLE questions (
question_id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
type VARCHAR(255) NOT NULL,
content TEXT NOT NULL,
answer TEXT
);
sql
CREATE TABLE answer_records (
record_id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
question_id INT NOT NULL,
answer TEXT NOT NULL,
is_correct BOOLEAN NOT NULL,
answer_time DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(user_id),
FOREIGN KEY (question_id) REFERENCES questions(question_id)
);
sql
CREATE TABLE wrong_questions (
wrong_id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
question_id INT NOT NULL,
FOREIGN KEY (user_id) REFERENCES users(user_id),
FOREIGN KEY (question_id) REFERENCES questions(question_id)
);
javascript
const jwt = require('jsonwebtoken');
app.post('/api/login', function(req, res) {
const { username, password } = req.body;
const user = users.find(u => u.username === username && u.password === password);
if (user) {
const token = jwt.sign({ userId: user.id, username: user.username }, 'your-secret-key', { expiresIn: '1h' });
res.json({ message: '登录成功', user, token });
} else {
res.status(401).json({ message: '用户名或密码错误' });
}
});
// 在需要认证的路由添加中间件
const authenticateUser = (req, res, next) => {
const token = req.headers['authorization'];
if (!token) {
return res.status(401).json({ message: '未提供认证令牌' });
}
try {
const decoded = jwt.verify(token.replace('Bearer ', ''), 'your-secret-key');
req.user = decoded;
next();
} catch (error) {
return res.status(401).json({ message: '无效的认证令牌' });
}
};
app.get('/api/user/profile', authenticateUser, function(req, res) {
const user = users.find(u => u.id === req.user.userId);
res.json(user);
});
javascript
const bcrypt = require('bcrypt');
app.post('/api/register', function(req, res) {
const { username, password } = req.body;
bcrypt.hash(password, 10, function(err, hash) {
if (err) {
return res.status(500).json({ message: '密码加密失败' });
}
const newUser = { id: Date.now(), username, password: hash };
users.push(newUser);
res.json({ message: '注册成功', user: newUser });
});
});
javascript
const mysql = require('mysql');
const connection = mysql.createConnection({
host : 'localhost',
user : 'your_username',
password : 'your_password',
database : 'your_database'
});
connection.connect();
// 示例插入用户数据
app.post('/api/register', function(req, res) {
const { username, password } = req.body;
const sql = 'INSERT INTO users (username, password) VALUES (?,?)';
bcrypt.hash(password, 10, function(err, hash) {
if (err) {
return res.status(500).json({ message: '密码加密失败' });
}
connection.query(sql, [username, hash], function (error, results, fields) {
if (error) throw error;
res.json({ message: '注册成功', user: { id: results.insertId, username, password: hash } });
});
});
});
javascript
const redis = require('ioredis');
const client = new redis();
app.get('/api/questions', async function(req, res) {
const cachedQuestions = await client.get('questions');
if (cachedQuestions) {
res.json(JSON.parse(cachedQuestions));
} else {
const questions = []; // 从数据库获取题目逻辑
client.set('questions', JSON.stringify(questions));
res.json(questions);
}
});
sql
CREATE INDEX idx_username ON users (username);
CREATE INDEX idx_question_type ON questions (type);
javascript
const Kue = require('kue');
const queue = Kue.createQueue();
app.post('/api/admin/batchImportQuestions', function(req, res) {
const questionsData = req.body;
queue.create('batchImport', { questionsData })
.save(function (err) {
if (!err) {
res.json({ message: '批量导入任务已提交' });
} else {
res.status(500).json({ message: '任务提交失败' });
}
});
});
queue.process('batchImport', function (job, done) {
const { questionsData } = job.data;
// 执行批量导入题目到数据库的逻辑
done();
});
通过以上全面的框架设计和详细的解决方案,能够构建一个功能完善、安全可靠且性能良好的 AI 智能题库小程序刷题系统。在实际开发过程中,还需要根据具体需求进行进一步的细化和完善,不断优化系统以满足用户的使用要求。