3 ms·
Добавим необходимые функции: статистику опроса, авторизацию для админа и подключение к базе данных MySQL. Начнем с MySQL и дампа базы, затем добавим логику авто
by fghsss 2y ago
Добавим необходимые функции: статистику опроса, авторизацию для админа и подключение к базе данных MySQL. Начнем с MySQL и дампа базы, затем добавим логику авторизации и статистику.
### Шаг 1: Настройка базы данных MySQL и дампа
1. Создайте базу данных MySQL и таблицу `surveys`.
```sql
CREATE DATABASE survey_db;
USE survey_db;
CREATE TABLE surveys (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
editable BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE responses (
id INT AUTO_INCREMENT PRIMARY KEY,
survey_id INT,
response_text TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (survey_id) REFERENCES surveys(id)
);
```
2. Чтобы создать дамп базы данных, используйте команду:
```bash
mysqldump -u your_username -p survey_db > survey_db_dump.sql
```
### Шаг 2: Настройка соединения с MySQL в `app.js`
Установите модуль `mysql2`:
```bash
npm install mysql2
```
В `app.js` добавим подключение к базе данных:
```javascript
const mysql = require('mysql2');
// Подключение к базе данных
const db = mysql.createConnection({
host: 'localhost',
user: 'your_username',
password: 'your_password',
database: 'survey_db'
});
db.connect(err => {
if (err) throw err;
console.log('Connected to MySQL database');
});
```
### Шаг 3: Добавляем авторизацию для админа
Используем простую авторизацию через JWT. Установите `jsonwebtoken`:
```bash
npm install jsonwebtoken
```
Добавьте секретный ключ:
```javascript
const jwt = require('jsonwebtoken');
const SECRET_KEY = 'your_secret_key';
```
Добавьте эндпоинт для логина и middleware для защиты маршрутов:
```javascript
// Эндпоинт для логина
app.post('/login', (req, res) => {
const { username, password } = req.body;
if (username === 'admin' && password === 'password') { // Используйте более безопасный метод в реальном проекте
const token = jwt.sign({ username }, SECRET_KEY, { expiresIn: '1h' });
res.json({ token });
} else {
res.status(401).json({ error: 'Invalid credentials' });
}
});
// Middleware для проверки токена
const authenticateToken = (req, res, next) => {
const token = req.headers['authorization'];
if (!token) return res.sendStatus(401);
jwt.verify(token, SECRET_KEY, (err, user) => {
if (err) return res.sendStatus(403);
req.user = user;
next();
});
};
```
Теперь добавьте `authenticateToken` как middleware к защищенным маршрутам, например:
```javascript
app.post('/surveys', authenticateToken, (req, res) => { /* код создания опроса / });
```
### Шаг 4: Добавляем статистику опроса
Создаем маршрут для получения статистики. Этот маршрут считает количество ответов для каждого опроса.
```javascript
app.get('/surveys/:id/statistics', authenticateToken, (req, res) => {
const surveyId = req.params.id;
db.query('SELECT COUNT(*) AS response_count FROM responses WHERE survey_id = ?', [surveyId], (err, results) => {
if (err) throw err;
res.json({ surveyId, response_count: results[0].response_count });
});
});
```
### Полный `app.js`
Приложение теперь поддерживает:
1. Авторизацию администратора с помощью JWT.
2. Подключение к базе данных MySQL.
3. Статистику по количеству ответов на опросы.
Вы можете протестировать проект, отправляя запросы на сервер.