index.html 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8" />
  5. <meta name="viewport" content="width=device-width" />
  6. <title>чат</title>
  7. <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
  8. </head>
  9. <body class="container bg-info">
  10. <h2>Чат mongoose with crud</h2>
  11. <form name="userForm">
  12. <input type="hidden" name="id" value="0" />
  13. <div class="form-group">
  14. <label for="name">Имя:</label>
  15. <input class="form-control" name="name" />
  16. </div>
  17. <div class="form-group">
  18. <label for="message">Сообщение:</label>
  19. <input class="form-control" name="message" />
  20. </div>
  21. <div class="panel-body">
  22. <button type="submit" class="btn btn-sm btn-primary">Отправить</button>
  23. <!-- <a id="reset" class="btn btn-sm btn-primary">Сбросить</a> -->
  24. </div>
  25. </form>
  26. <table class="table table-condensed table-striped table-bordered">
  27. <thead><tr><th>Id</th><th>Имя</th><th>Сообщение</th><th>Дата</th></tr></thead>
  28. <tbody>
  29. </tbody>
  30. </table>
  31. <script>
  32. // Получение всех пользователей
  33. async function GetMessages() {
  34. // отправляет запрос и получаем ответ
  35. const response = await fetch("/api/messages", {
  36. method: "GET",
  37. headers: { "Accept": "application/json" }
  38. });
  39. // если запрос прошел нормально
  40. if (response.ok === true) {
  41. // получаем данные
  42. const messages = await response.json();
  43. let rows = document.querySelector("tbody");
  44. messages.forEach(message => {
  45. // добавляем полученные элементы в таблицу
  46. rows.append(row(message));
  47. });
  48. }
  49. }
  50. // Получение одного пользователя
  51. async function GetMessage(id) {
  52. const response = await fetch("/api/messages/" + id, {
  53. method: "GET",
  54. headers: { "Accept": "application/json" }
  55. });
  56. if (response.ok === true) {
  57. const message = await response.json();
  58. const form = document.forms["userForm"];
  59. form.elements["id"].value = message._id;
  60. form.elements["name"].value = message.name;
  61. form.elements["message"].value = message.message;
  62. }
  63. }
  64. // Добавление пользователя
  65. async function CreateMessage(userName, userMessage) {
  66. const response = await fetch("api/messages", {
  67. method: "POST",
  68. headers: { "Accept": "application/json", "Content-Type": "application/json" },
  69. body: JSON.stringify({
  70. name: userName,
  71. message: userMessage,
  72. })
  73. });
  74. if (response.ok === true) {
  75. const message = await response.json();
  76. reset();
  77. document.querySelector("tbody").append(row(message));
  78. }
  79. }
  80. // Изменение пользователя
  81. async function EditMessage(messageId, userName, userMessage) {
  82. const response = await fetch("api/messages", {
  83. method: "PUT",
  84. headers: { "Accept": "application/json", "Content-Type": "application/json" },
  85. body: JSON.stringify({
  86. id: messageId,
  87. name: userName,
  88. message: userMessage,
  89. })
  90. });
  91. if (response.ok === true) {
  92. const messageItem = await response.json();
  93. reset();
  94. document.querySelector("tr[data-rowid='" + messageItem._id + "']").replaceWith(row(messageItem));
  95. }
  96. }
  97. // Удаление пользователя
  98. async function DeleteMessage(id) {
  99. const response = await fetch("/api/messages/" + id, {
  100. method: "DELETE",
  101. headers: { "Accept": "application/json" }
  102. });
  103. if (response.ok === true) {
  104. const messageItem = await response.json();
  105. document.querySelector("tr[data-rowid='" + messageItem._id + "']").remove();
  106. }
  107. }
  108. // сброс формы
  109. function reset() {
  110. const form = document.forms["userForm"];
  111. form.reset();
  112. form.elements["id"].value = 0;
  113. }
  114. // создание строки для таблицы
  115. function row(message) {
  116. const date = new Date().getTime();
  117. const createdAt = new Date(date).toLocaleString();
  118. const tr = document.createElement("tr");
  119. tr.setAttribute("data-rowid", message._id);
  120. const idTd = document.createElement("td");
  121. idTd.append(message._id);
  122. tr.append(idTd);
  123. const nameTd = document.createElement("td");
  124. nameTd.append(message.name);
  125. tr.append(nameTd);
  126. const ageTd = document.createElement("td");
  127. ageTd.append(message.message);
  128. tr.append(ageTd);
  129. const createdAtTd = document.createElement("td");
  130. createdAtTd.append(createdAt);
  131. tr.append(createdAtTd);
  132. const linksTd = document.createElement("td");
  133. const editLink = document.createElement("a");
  134. editLink.setAttribute("data-id", message._id);
  135. editLink.setAttribute("style", "cursor:pointer;padding:15px;");
  136. editLink.append("Изменить");
  137. editLink.addEventListener("click", e => {
  138. e.preventDefault();
  139. GetMessage(message._id);
  140. });
  141. linksTd.append(editLink);
  142. const removeLink = document.createElement("a");
  143. removeLink.setAttribute("data-id", message._id);
  144. removeLink.setAttribute("style", "cursor:pointer;padding:15px;");
  145. removeLink.append("Удалить");
  146. removeLink.addEventListener("click", e => {
  147. e.preventDefault();
  148. DeleteMessage(message._id);
  149. });
  150. linksTd.append(removeLink);
  151. tr.appendChild(linksTd);
  152. return tr;
  153. }
  154. // сброс значений формы
  155. // document.getElementById("reset").click(function (e) {
  156. // e.preventDefault();
  157. // reset();
  158. // })
  159. // отправка формы
  160. document.forms["userForm"].addEventListener("submit", e => {
  161. e.preventDefault();
  162. const form = document.forms["userForm"];
  163. const id = form.elements["id"].value;
  164. const name = form.elements["name"].value;
  165. const message = form.elements["message"].value;
  166. if (id == 0)
  167. CreateMessage(name, message);
  168. else
  169. EditMessage(id, name, message);
  170. });
  171. GetMessages();
  172. </script>
  173. </body>
  174. </html>