-
Notifications
You must be signed in to change notification settings - Fork 0
/
client.js
94 lines (80 loc) · 2.98 KB
/
client.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
const apiUrl = 'http://localhost:3000';
let token = null;
// Регистрация
document.getElementById('registerForm').addEventListener('submit', async (e) => {
e.preventDefault();
const username = document.getElementById('registerUsername').value;
const password = document.getElementById('registerPassword').value;
const response = await fetch(`${apiUrl}/register`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ username, password })
});
const data = await response.json();
alert(data.message);
});
// Логин
document.getElementById('loginForm').addEventListener('submit', async (e) => {
e.preventDefault();
const username = document.getElementById('loginUsername').value;
const password = document.getElementById('loginPassword').value;
const response = await fetch(`${apiUrl}/login`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ username, password })
});
const data = await response.json();
if (data.token) {
token = data.token;
document.getElementById('authSection').style.display = 'none';
document.getElementById('postSection').style.display = 'block';
fetchPosts();
} else {
alert('Ошибка входа');
}
});
// Получение постов
async function fetchPosts() {
const response = await fetch(`${apiUrl}/posts`);
const posts = await response.json();
const postsContainer = document.getElementById('postsContainer');
postsContainer.innerHTML = '';
posts.forEach(post => {
const postElement = document.createElement('div');
postElement.innerHTML = `
<p><strong>${post.username}</strong>: ${post.content}</p>
${post.username === getCurrentUser() ? `<button onclick="deletePost(${post.id})">Удалить</button>` : ''}
`;
postsContainer.appendChild(postElement);
});
}
// Добавление поста
document.getElementById('postBtn').addEventListener('click', async () => {
const content = document.getElementById('postContent').value;
const response = await fetch(`${apiUrl}/posts`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${token}`
},
body: JSON.stringify({ content })
});
if (response.ok) {
document.getElementById('postContent').value = '';
fetchPosts();
}
});
// Удаление поста
async function deletePost(postId) {
await fetch(`${apiUrl}/posts/${postId}`, {
method: 'DELETE',
headers: { 'Authorization': `Bearer ${token}` }
});
fetchPosts();
}
// Получение текущего пользователя (декодирование токена)
function getCurrentUser() {
if (!token) return null;
const payload = JSON.parse(atob(token.split('.')[1]));
return payload.username;
}