print_add

This commit is contained in:
2026-09-01 11:47:15 +03:00
parent 1fe0d67731
commit 70a20665ae
38 changed files with 5494 additions and 889 deletions
+319
View File
@@ -2017,3 +2017,322 @@
[2026-08-18T13:21:48.177Z] [INFO] Login successful
[2026-08-18T13:21:48.283Z] [INFO] [DB CHECK] Проверка подключения к MySQL: localhost:3306/rasch_content
[2026-08-18T13:21:48.296Z] [INFO] [DB CHECK] ✅ Успешное подключение к MySQL
[2026-08-19T06:49:14.829Z] [INFO] Server running on http://localhost:3005
[2026-08-19T06:49:14.837Z] [INFO] Card logs initialized successfully
[2026-08-19T08:16:23.702Z] [INFO] Server running on http://localhost:3005
[2026-08-19T08:16:23.706Z] [INFO] Card logs initialized successfully
[2026-08-19T09:32:26.775Z] [INFO] Server running on http://localhost:3005
[2026-08-19T09:32:26.778Z] [INFO] Card logs initialized successfully
[2026-08-19T09:54:13.538Z] [INFO] Server running on http://localhost:3005
[2026-08-19T09:54:13.541Z] [INFO] Card logs initialized successfully
[2026-08-19T10:03:57.687Z] [INFO] Server running on http://localhost:3005
[2026-08-19T10:03:57.691Z] [INFO] Card logs initialized successfully
[2026-08-19T13:16:59.418Z] [INFO] Login successful
[2026-08-19T13:16:59.575Z] [INFO] [DB CHECK] Проверка подключения к MySQL: localhost:3306/rasch_content
[2026-08-19T13:16:59.591Z] [INFO] [DB CHECK] ✅ Успешное подключение к MySQL
[2026-08-19T13:17:34.211Z] [INFO] [LOGIN] Попытка входа: vova
[2026-08-19T13:17:34.212Z] [INFO] [LOGIN] Проверка подключения к базе...
[2026-08-19T13:17:34.217Z] [INFO] [LOGIN] Результат поиска пользователя: найден
[2026-08-19T13:17:34.217Z] [INFO] [LOGIN] Сравнение пароля через bcrypt...
[2026-08-19T13:17:34.291Z] [INFO] [LOGIN] Результат сравнения пароля: true
[2026-08-19T13:17:34.292Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":4,"username":"vova"}
[2026-08-19T13:17:34.293Z] [INFO] [LOGIN] Ответ отправлен
[2026-08-22T10:02:00.127Z] [INFO] Server running on http://localhost:3005
[2026-08-22T10:02:00.130Z] [INFO] Card logs initialized successfully
[2026-08-28T13:16:54.329Z] [INFO] Server running on http://localhost:3005
[2026-08-28T13:16:54.345Z] [INFO] Card logs initialized successfully
[2026-08-28T13:17:44.305Z] [WARN] Неверный пароль
[2026-08-28T13:17:47.842Z] [WARN] Неверный пароль
[2026-08-28T13:17:49.122Z] [WARN] Неверный пароль
[2026-08-28T13:18:24.580Z] [INFO] Login successful
[2026-08-28T13:18:24.735Z] [INFO] [DB CHECK] Проверка подключения к MySQL: localhost:3306/rasch_content
[2026-08-28T13:18:24.756Z] [INFO] [DB CHECK] ✅ Успешное подключение к MySQL
[2026-08-28T13:18:42.365Z] [INFO] [LOGIN] Попытка входа: vova
[2026-08-28T13:18:42.366Z] [INFO] [LOGIN] Проверка подключения к базе...
[2026-08-28T13:18:42.380Z] [INFO] [LOGIN] Результат поиска пользователя: найден
[2026-08-28T13:18:42.381Z] [INFO] [LOGIN] Сравнение пароля через bcrypt...
[2026-08-28T13:18:42.462Z] [INFO] [LOGIN] Результат сравнения пароля: true
[2026-08-28T13:18:42.463Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":4,"username":"vova"}
[2026-08-28T13:18:42.464Z] [INFO] [LOGIN] Ответ отправлен
[2026-08-28T13:21:07.055Z] [INFO] Server running on http://localhost:3005
[2026-08-28T13:21:07.058Z] [INFO] Card logs initialized successfully
[2026-08-28T13:21:24.349Z] [ERROR] MulterError: Unexpected field
at wrappedFileFilter (D:\rasch_git\electron\admin-server1\node_modules\multer\index.js:41:19)
at Multipart.<anonymous> (D:\rasch_git\electron\admin-server1\node_modules\multer\lib\make-middleware.js:193:7)
at Multipart.emit (node:events:509:28)
at HeaderParser.cb (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:358:14)
at HeaderParser.push (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:162:20)
at SBMH.ssCb [as _cb] (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:394:37)
at feed (D:\rasch_git\electron\admin-server1\node_modules\streamsearch\lib\sbmh.js:219:14)
at SBMH.push (D:\rasch_git\electron\admin-server1\node_modules\streamsearch\lib\sbmh.js:104:16)
at Multipart._write (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:567:19)
at writeOrBuffer (node:internal/streams/writable:570:12)
[2026-08-28T13:21:28.269Z] [ERROR] MulterError: Unexpected field
at wrappedFileFilter (D:\rasch_git\electron\admin-server1\node_modules\multer\index.js:41:19)
at Multipart.<anonymous> (D:\rasch_git\electron\admin-server1\node_modules\multer\lib\make-middleware.js:193:7)
at Multipart.emit (node:events:509:28)
at HeaderParser.cb (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:358:14)
at HeaderParser.push (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:162:20)
at SBMH.ssCb [as _cb] (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:394:37)
at feed (D:\rasch_git\electron\admin-server1\node_modules\streamsearch\lib\sbmh.js:219:14)
at SBMH.push (D:\rasch_git\electron\admin-server1\node_modules\streamsearch\lib\sbmh.js:104:16)
at Multipart._write (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:567:19)
at writeOrBuffer (node:internal/streams/writable:570:12)
[2026-08-28T13:22:13.764Z] [ERROR] MulterError: Unexpected field
at wrappedFileFilter (D:\rasch_git\electron\admin-server1\node_modules\multer\index.js:41:19)
at Multipart.<anonymous> (D:\rasch_git\electron\admin-server1\node_modules\multer\lib\make-middleware.js:193:7)
at Multipart.emit (node:events:509:28)
at HeaderParser.cb (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:358:14)
at HeaderParser.push (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:162:20)
at SBMH.ssCb [as _cb] (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:394:37)
at feed (D:\rasch_git\electron\admin-server1\node_modules\streamsearch\lib\sbmh.js:219:14)
at SBMH.push (D:\rasch_git\electron\admin-server1\node_modules\streamsearch\lib\sbmh.js:104:16)
at Multipart._write (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:567:19)
at writeOrBuffer (node:internal/streams/writable:570:12)
[2026-08-28T13:25:47.640Z] [INFO] Server running on http://localhost:3005
[2026-08-28T13:25:47.643Z] [INFO] Card logs initialized successfully
[2026-08-28T13:25:57.085Z] [ERROR] MulterError: Unexpected field
at wrappedFileFilter (D:\rasch_git\electron\admin-server1\node_modules\multer\index.js:41:19)
at Multipart.<anonymous> (D:\rasch_git\electron\admin-server1\node_modules\multer\lib\make-middleware.js:193:7)
at Multipart.emit (node:events:509:28)
at HeaderParser.cb (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:358:14)
at HeaderParser.push (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:162:20)
at SBMH.ssCb [as _cb] (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:394:37)
at feed (D:\rasch_git\electron\admin-server1\node_modules\streamsearch\lib\sbmh.js:219:14)
at SBMH.push (D:\rasch_git\electron\admin-server1\node_modules\streamsearch\lib\sbmh.js:104:16)
at Multipart._write (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:567:19)
at writeOrBuffer (node:internal/streams/writable:570:12)
[2026-08-28T13:28:40.679Z] [ERROR] MulterError: Unexpected field
at wrappedFileFilter (D:\rasch_git\electron\admin-server1\node_modules\multer\index.js:41:19)
at Multipart.<anonymous> (D:\rasch_git\electron\admin-server1\node_modules\multer\lib\make-middleware.js:193:7)
at Multipart.emit (node:events:509:28)
at HeaderParser.cb (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:358:14)
at HeaderParser.push (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:162:20)
at SBMH.ssCb [as _cb] (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:394:37)
at feed (D:\rasch_git\electron\admin-server1\node_modules\streamsearch\lib\sbmh.js:219:14)
at SBMH.push (D:\rasch_git\electron\admin-server1\node_modules\streamsearch\lib\sbmh.js:104:16)
at Multipart._write (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:567:19)
at writeOrBuffer (node:internal/streams/writable:570:12)
[2026-08-28T13:35:09.914Z] [ERROR] MulterError: Unexpected field
at wrappedFileFilter (D:\rasch_git\electron\admin-server1\node_modules\multer\index.js:41:19)
at Multipart.<anonymous> (D:\rasch_git\electron\admin-server1\node_modules\multer\lib\make-middleware.js:193:7)
at Multipart.emit (node:events:509:28)
at HeaderParser.cb (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:358:14)
at HeaderParser.push (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:162:20)
at SBMH.ssCb [as _cb] (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:394:37)
at feed (D:\rasch_git\electron\admin-server1\node_modules\streamsearch\lib\sbmh.js:219:14)
at SBMH.push (D:\rasch_git\electron\admin-server1\node_modules\streamsearch\lib\sbmh.js:104:16)
at Multipart._write (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:567:19)
at writeOrBuffer (node:internal/streams/writable:570:12)
[2026-08-28T13:36:00.169Z] [INFO] Server running on http://localhost:3005
[2026-08-28T13:36:00.172Z] [INFO] Card logs initialized successfully
[2026-08-28T13:37:58.077Z] [INFO] Server running on http://localhost:3005
[2026-08-28T13:37:58.080Z] [INFO] Card logs initialized successfully
[2026-08-28T13:38:24.214Z] [ERROR] MulterError: Unexpected field
at wrappedFileFilter (D:\rasch_git\electron\admin-server1\node_modules\multer\index.js:41:19)
at Multipart.<anonymous> (D:\rasch_git\electron\admin-server1\node_modules\multer\lib\make-middleware.js:193:7)
at Multipart.emit (node:events:509:28)
at HeaderParser.cb (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:358:14)
at HeaderParser.push (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:162:20)
at SBMH.ssCb [as _cb] (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:394:37)
at feed (D:\rasch_git\electron\admin-server1\node_modules\streamsearch\lib\sbmh.js:219:14)
at SBMH.push (D:\rasch_git\electron\admin-server1\node_modules\streamsearch\lib\sbmh.js:104:16)
at Multipart._write (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:567:19)
at writeOrBuffer (node:internal/streams/writable:570:12)
[2026-08-28T13:38:54.054Z] [ERROR] MulterError: Unexpected field
at wrappedFileFilter (D:\rasch_git\electron\admin-server1\node_modules\multer\index.js:41:19)
at Multipart.<anonymous> (D:\rasch_git\electron\admin-server1\node_modules\multer\lib\make-middleware.js:193:7)
at Multipart.emit (node:events:509:28)
at HeaderParser.cb (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:358:14)
at HeaderParser.push (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:162:20)
at SBMH.ssCb [as _cb] (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:394:37)
at feed (D:\rasch_git\electron\admin-server1\node_modules\streamsearch\lib\sbmh.js:219:14)
at SBMH.push (D:\rasch_git\electron\admin-server1\node_modules\streamsearch\lib\sbmh.js:104:16)
at Multipart._write (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:567:19)
at writeOrBuffer (node:internal/streams/writable:570:12)
[2026-08-28T13:38:57.735Z] [ERROR] MulterError: Unexpected field
at wrappedFileFilter (D:\rasch_git\electron\admin-server1\node_modules\multer\index.js:41:19)
at Multipart.<anonymous> (D:\rasch_git\electron\admin-server1\node_modules\multer\lib\make-middleware.js:193:7)
at Multipart.emit (node:events:509:28)
at HeaderParser.cb (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:358:14)
at HeaderParser.push (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:162:20)
at SBMH.ssCb [as _cb] (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:394:37)
at feed (D:\rasch_git\electron\admin-server1\node_modules\streamsearch\lib\sbmh.js:219:14)
at SBMH.push (D:\rasch_git\electron\admin-server1\node_modules\streamsearch\lib\sbmh.js:104:16)
at Multipart._write (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:567:19)
at writeOrBuffer (node:internal/streams/writable:570:12)
[2026-08-28T13:40:58.165Z] [INFO] Server running on http://localhost:3005
[2026-08-28T13:40:58.168Z] [INFO] Card logs initialized successfully
[2026-08-28T13:41:09.217Z] [INFO] [LOGIN] Попытка входа: vova
[2026-08-28T13:41:09.218Z] [INFO] [LOGIN] Проверка подключения к базе...
[2026-08-28T13:41:09.220Z] [INFO] [LOGIN] Результат поиска пользователя: найден
[2026-08-28T13:41:09.220Z] [INFO] [LOGIN] Сравнение пароля через bcrypt...
[2026-08-28T13:41:09.298Z] [INFO] [LOGIN] Результат сравнения пароля: true
[2026-08-28T13:41:09.299Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":4,"username":"vova"}
[2026-08-28T13:41:09.301Z] [INFO] [LOGIN] Ответ отправлен
[2026-08-28T13:41:18.242Z] [ERROR] MulterError: Unexpected field
at wrappedFileFilter (D:\rasch_git\electron\admin-server1\node_modules\multer\index.js:41:19)
at Multipart.<anonymous> (D:\rasch_git\electron\admin-server1\node_modules\multer\lib\make-middleware.js:193:7)
at Multipart.emit (node:events:509:28)
at HeaderParser.cb (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:358:14)
at HeaderParser.push (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:162:20)
at SBMH.ssCb [as _cb] (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:394:37)
at feed (D:\rasch_git\electron\admin-server1\node_modules\streamsearch\lib\sbmh.js:219:14)
at SBMH.push (D:\rasch_git\electron\admin-server1\node_modules\streamsearch\lib\sbmh.js:104:16)
at Multipart._write (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:567:19)
at writeOrBuffer (node:internal/streams/writable:570:12)
[2026-08-28T13:44:33.109Z] [INFO] Server running on http://localhost:3005
[2026-08-28T13:44:33.112Z] [INFO] Card logs initialized successfully
[2026-08-28T13:44:45.327Z] [ERROR] MulterError: Unexpected field
at wrappedFileFilter (D:\rasch_git\electron\admin-server1\node_modules\multer\index.js:41:19)
at Multipart.<anonymous> (D:\rasch_git\electron\admin-server1\node_modules\multer\lib\make-middleware.js:193:7)
at Multipart.emit (node:events:509:28)
at HeaderParser.cb (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:358:14)
at HeaderParser.push (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:162:20)
at SBMH.ssCb [as _cb] (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:394:37)
at feed (D:\rasch_git\electron\admin-server1\node_modules\streamsearch\lib\sbmh.js:219:14)
at SBMH.push (D:\rasch_git\electron\admin-server1\node_modules\streamsearch\lib\sbmh.js:104:16)
at Multipart._write (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:567:19)
at writeOrBuffer (node:internal/streams/writable:570:12)
[2026-08-28T13:47:57.993Z] [INFO] Server running on http://localhost:3005
[2026-08-28T13:47:57.997Z] [INFO] Card logs initialized successfully
[2026-08-28T13:52:17.446Z] [INFO] Server running on http://localhost:3005
[2026-08-28T13:52:17.449Z] [INFO] Card logs initialized successfully
[2026-08-28T13:53:18.856Z] [INFO] Server running on http://localhost:3005
[2026-08-28T13:53:18.859Z] [INFO] Card logs initialized successfully
[2026-08-28T13:53:30.533Z] [INFO] [LOGIN] Попытка входа: vova
[2026-08-28T13:53:30.534Z] [INFO] [LOGIN] Проверка подключения к базе...
[2026-08-28T13:53:30.546Z] [INFO] [LOGIN] Результат поиска пользователя: найден
[2026-08-28T13:53:30.547Z] [INFO] [LOGIN] Сравнение пароля через bcrypt...
[2026-08-28T13:53:30.646Z] [INFO] [LOGIN] Результат сравнения пароля: false
[2026-08-28T13:53:30.646Z] [WARN] [LOGIN] Неверный пароль для пользователя: vova
[2026-08-28T13:53:36.962Z] [INFO] [LOGIN] Попытка входа: vova
[2026-08-28T13:53:36.963Z] [INFO] [LOGIN] Проверка подключения к базе...
[2026-08-28T13:53:36.965Z] [INFO] [LOGIN] Результат поиска пользователя: найден
[2026-08-28T13:53:36.965Z] [INFO] [LOGIN] Сравнение пароля через bcrypt...
[2026-08-28T13:53:37.043Z] [INFO] [LOGIN] Результат сравнения пароля: true
[2026-08-28T13:53:37.043Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":4,"username":"vova"}
[2026-08-28T13:53:37.045Z] [INFO] [LOGIN] Ответ отправлен
[2026-08-28T13:54:12.715Z] [INFO] [LOGIN] Попытка входа: vova
[2026-08-28T13:54:12.715Z] [INFO] [LOGIN] Проверка подключения к базе...
[2026-08-28T13:54:12.717Z] [INFO] [LOGIN] Результат поиска пользователя: найден
[2026-08-28T13:54:12.718Z] [INFO] [LOGIN] Сравнение пароля через bcrypt...
[2026-08-28T13:54:12.803Z] [INFO] [LOGIN] Результат сравнения пароля: true
[2026-08-28T13:54:12.804Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":4,"username":"vova"}
[2026-08-28T13:54:12.805Z] [INFO] [LOGIN] Ответ отправлен
[2026-08-28T13:54:29.593Z] [ERROR] MulterError: Unexpected field
at wrappedFileFilter (D:\rasch_git\electron\admin-server1\node_modules\multer\index.js:41:19)
at Multipart.<anonymous> (D:\rasch_git\electron\admin-server1\node_modules\multer\lib\make-middleware.js:193:7)
at Multipart.emit (node:events:509:28)
at HeaderParser.cb (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:358:14)
at HeaderParser.push (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:162:20)
at SBMH.ssCb [as _cb] (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:394:37)
at feed (D:\rasch_git\electron\admin-server1\node_modules\streamsearch\lib\sbmh.js:219:14)
at SBMH.push (D:\rasch_git\electron\admin-server1\node_modules\streamsearch\lib\sbmh.js:104:16)
at Multipart._write (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:567:19)
at writeOrBuffer (node:internal/streams/writable:570:12)
[2026-08-28T13:55:32.725Z] [INFO] Server running on http://localhost:3005
[2026-08-28T13:55:32.728Z] [INFO] Card logs initialized successfully
[2026-08-28T13:55:44.526Z] [ERROR] MulterError: Unexpected field
at wrappedFileFilter (D:\rasch_git\electron\admin-server1\node_modules\multer\index.js:41:19)
at Multipart.<anonymous> (D:\rasch_git\electron\admin-server1\node_modules\multer\lib\make-middleware.js:193:7)
at Multipart.emit (node:events:509:28)
at HeaderParser.cb (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:358:14)
at HeaderParser.push (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:162:20)
at SBMH.ssCb [as _cb] (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:394:37)
at feed (D:\rasch_git\electron\admin-server1\node_modules\streamsearch\lib\sbmh.js:219:14)
at SBMH.push (D:\rasch_git\electron\admin-server1\node_modules\streamsearch\lib\sbmh.js:104:16)
at Multipart._write (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:567:19)
at writeOrBuffer (node:internal/streams/writable:570:12)
[2026-08-28T13:57:30.453Z] [INFO] Server running on http://localhost:3005
[2026-08-28T13:57:30.456Z] [INFO] Card logs initialized successfully
[2026-08-28T13:57:37.890Z] [INFO] [LOGIN] Попытка входа: vova
[2026-08-28T13:57:37.891Z] [INFO] [LOGIN] Проверка подключения к базе...
[2026-08-28T13:57:37.893Z] [INFO] [LOGIN] Результат поиска пользователя: найден
[2026-08-28T13:57:37.893Z] [INFO] [LOGIN] Сравнение пароля через bcrypt...
[2026-08-28T13:57:37.973Z] [INFO] [LOGIN] Результат сравнения пароля: true
[2026-08-28T13:57:37.973Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":4,"username":"vova"}
[2026-08-28T13:57:37.975Z] [INFO] [LOGIN] Ответ отправлен
[2026-08-28T13:59:04.163Z] [INFO] Server running on http://localhost:3005
[2026-08-28T13:59:04.166Z] [INFO] Card logs initialized successfully
[2026-08-28T13:59:18.113Z] [INFO] [LOGIN] Попытка входа: vova
[2026-08-28T13:59:18.113Z] [INFO] [LOGIN] Проверка подключения к базе...
[2026-08-28T13:59:18.128Z] [INFO] [LOGIN] Результат поиска пользователя: найден
[2026-08-28T13:59:18.129Z] [INFO] [LOGIN] Сравнение пароля через bcrypt...
[2026-08-28T13:59:18.259Z] [INFO] [LOGIN] Результат сравнения пароля: true
[2026-08-28T13:59:18.260Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":4,"username":"vova"}
[2026-08-28T13:59:18.262Z] [INFO] [LOGIN] Ответ отправлен
[2026-08-28T14:02:13.224Z] [INFO] Server running on http://localhost:3005
[2026-08-28T14:02:13.226Z] [INFO] Card logs initialized successfully
[2026-08-28T14:02:25.923Z] [INFO] [LOGIN] Попытка входа: vova
[2026-08-28T14:02:25.924Z] [INFO] [LOGIN] Проверка подключения к базе...
[2026-08-28T14:02:25.940Z] [INFO] [LOGIN] Результат поиска пользователя: найден
[2026-08-28T14:02:25.941Z] [INFO] [LOGIN] Сравнение пароля через bcrypt...
[2026-08-28T14:02:26.078Z] [INFO] [LOGIN] Результат сравнения пароля: true
[2026-08-28T14:02:26.087Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":4,"username":"vova"}
[2026-08-28T14:02:26.089Z] [INFO] [LOGIN] Ответ отправлен
[2026-08-28T14:03:37.800Z] [ERROR] MulterError: Unexpected field
at wrappedFileFilter (D:\rasch_git\electron\admin-server1\node_modules\multer\index.js:41:19)
at Multipart.<anonymous> (D:\rasch_git\electron\admin-server1\node_modules\multer\lib\make-middleware.js:193:7)
at Multipart.emit (node:events:509:28)
at HeaderParser.cb (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:358:14)
at HeaderParser.push (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:162:20)
at SBMH.ssCb [as _cb] (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:394:37)
at feed (D:\rasch_git\electron\admin-server1\node_modules\streamsearch\lib\sbmh.js:219:14)
at SBMH.push (D:\rasch_git\electron\admin-server1\node_modules\streamsearch\lib\sbmh.js:104:16)
at Multipart._write (D:\rasch_git\electron\admin-server1\node_modules\busboy\lib\types\multipart.js:567:19)
at writeOrBuffer (node:internal/streams/writable:570:12)
[2026-08-28T14:05:00.439Z] [INFO] Server running on http://localhost:3005
[2026-08-28T14:05:00.442Z] [INFO] Card logs initialized successfully
[2026-08-28T14:05:47.706Z] [INFO] [LOGIN] Попытка входа: vova
[2026-08-28T14:05:47.707Z] [INFO] [LOGIN] Проверка подключения к базе...
[2026-08-28T14:05:47.709Z] [INFO] [LOGIN] Результат поиска пользователя: найден
[2026-08-28T14:05:47.710Z] [INFO] [LOGIN] Сравнение пароля через bcrypt...
[2026-08-28T14:05:47.796Z] [INFO] [LOGIN] Результат сравнения пароля: true
[2026-08-28T14:05:47.797Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":4,"username":"vova"}
[2026-08-28T14:05:47.798Z] [INFO] [LOGIN] Ответ отправлен
[2026-08-28T14:06:31.202Z] [INFO] [LOGIN] Попытка входа: grivova
[2026-08-28T14:06:31.202Z] [INFO] [LOGIN] Проверка подключения к базе...
[2026-08-28T14:06:31.204Z] [INFO] [LOGIN] Результат поиска пользователя: не найден
[2026-08-28T14:06:31.204Z] [WARN] [LOGIN] Пользователь не найден: grivova
[2026-08-28T14:06:43.404Z] [INFO] [LOGIN] Попытка входа: asutp
[2026-08-28T14:06:43.406Z] [INFO] [LOGIN] Проверка подключения к базе...
[2026-08-28T14:06:43.407Z] [INFO] [LOGIN] Результат поиска пользователя: найден
[2026-08-28T14:06:43.408Z] [INFO] [LOGIN] Сравнение пароля через bcrypt...
[2026-08-28T14:06:43.489Z] [INFO] [LOGIN] Результат сравнения пароля: true
[2026-08-28T14:06:43.490Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":5,"username":"asutp"}
[2026-08-28T14:06:43.491Z] [INFO] [LOGIN] Ответ отправлен
[2026-08-28T14:07:57.016Z] [INFO] Server running on http://localhost:3005
[2026-08-28T14:07:57.018Z] [INFO] Card logs initialized successfully
[2026-08-28T14:08:15.541Z] [INFO] [LOGIN] Попытка входа: vova
[2026-08-28T14:08:15.543Z] [INFO] [LOGIN] Проверка подключения к базе...
[2026-08-28T14:08:15.546Z] [INFO] [LOGIN] Результат поиска пользователя: найден
[2026-08-28T14:08:15.547Z] [INFO] [LOGIN] Сравнение пароля через bcrypt...
[2026-08-28T14:08:15.629Z] [INFO] [LOGIN] Результат сравнения пароля: true
[2026-08-28T14:08:15.630Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":4,"username":"vova"}
[2026-08-28T14:08:15.631Z] [INFO] [LOGIN] Ответ отправлен
[2026-08-28T14:09:51.626Z] [INFO] Server running on http://localhost:3005
[2026-08-28T14:09:51.629Z] [INFO] Card logs initialized successfully
[2026-08-31T05:58:23.110Z] [INFO] Server running on http://localhost:3005
[2026-08-31T05:58:23.117Z] [INFO] Card logs initialized successfully
[2026-08-31T11:41:26.146Z] [INFO] Server running on http://localhost:3005
[2026-08-31T11:41:26.163Z] [INFO] Card logs initialized successfully
[2026-08-31T11:41:58.530Z] [INFO] [LOGIN] Попытка входа: vova
[2026-08-31T11:41:58.531Z] [INFO] [LOGIN] Проверка подключения к базе...
[2026-08-31T11:41:58.554Z] [INFO] [LOGIN] Результат поиска пользователя: найден
[2026-08-31T11:41:58.562Z] [INFO] [LOGIN] Сравнение пароля через bcrypt...
[2026-08-31T11:41:58.657Z] [INFO] [LOGIN] Результат сравнения пароля: true
[2026-08-31T11:41:58.661Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":4,"username":"vova"}
[2026-08-31T11:41:58.668Z] [INFO] [LOGIN] Ответ отправлен
[2026-08-31T12:06:00.544Z] [INFO] Server running on http://localhost:3005
[2026-08-31T12:06:00.547Z] [INFO] Card logs initialized successfully
[2026-08-31T12:18:40.420Z] [INFO] Server running on http://localhost:3005
[2026-08-31T12:18:40.423Z] [INFO] Card logs initialized successfully
[2026-08-31T12:21:29.695Z] [INFO] Server running on http://localhost:3005
[2026-08-31T12:21:29.697Z] [INFO] Card logs initialized successfully
[2026-08-31T12:23:29.133Z] [INFO] Server running on http://localhost:3005
[2026-08-31T12:23:29.137Z] [INFO] Card logs initialized successfully
[2026-08-31T12:27:21.641Z] [INFO] Server running on http://localhost:3005
[2026-08-31T12:27:21.644Z] [INFO] Card logs initialized successfully
[2026-08-31T12:30:33.180Z] [INFO] Server running on http://localhost:3005
[2026-08-31T12:30:33.183Z] [INFO] Card logs initialized successfully
+180 -64
View File
@@ -9,93 +9,211 @@ const fs = require('fs');
const uploadDir = path.join(__dirname, '../../uploads');
if (!fs.existsSync(uploadDir)) fs.mkdirSync(uploadDir, { recursive: true });
const storage = multer.diskStorage({
destination: (req, file, cb) => cb(null, uploadDir),
filename: (req, file, cb) => {
const ext = path.extname(file.originalname);
const name = Date.now() + '-' + Math.round(Math.random() * 1e6) + ext;
cb(null, name);
}
destination: (req, file, cb) => cb(null, uploadDir),
filename: (req, file, cb) => {
const ext = path.extname(file.originalname);
const name = Date.now() + '-' + Math.round(Math.random() * 1e6) + ext;
cb(null, name);
}
});
const ALLOWED_MIME_TYPES = [
'image/jpeg', 'image/png',
'video/mp4', 'video/quicktime'
'image/jpeg', 'image/png',
'video/mp4', 'video/quicktime'
];
const MAX_FILE_SIZE = 20 * 1024 * 1024; // 20 МБ
const upload = multer({
storage,
limits: { fileSize: MAX_FILE_SIZE },
fileFilter: (req, file, cb) => {
if (ALLOWED_MIME_TYPES.includes(file.mimetype)) {
cb(null, true);
} else {
cb(new Error('Недопустимый тип файла'));
storage,
limits: { fileSize: MAX_FILE_SIZE },
fileFilter: (req, file, cb) => {
if (ALLOWED_MIME_TYPES.includes(file.mimetype)) {
cb(null, true);
} else {
cb(new Error('Недопустимый тип файла'));
}
}
}
});
// ============================================
// 📸 СЛАЙДЫ ДЛЯ КАРУСЕЛИ (В САМОМ НАЧАЛЕ)
// ============================================
// Получить все активные слайды
router.get('/slides', async (req, res) => {
console.log('📸 GET /slides');
try {
const [rows] = await db.query(
'SELECT * FROM slides WHERE is_active = 1 ORDER BY `order` ASC'
);
res.json(rows);
} catch (err) {
console.error('❌ Ошибка получения слайдов:', err);
res.status(500).json({ message: 'Ошибка сервера', error: err.message });
}
});
// Получить все слайды (для админки)
router.get('/slides/all', async (req, res) => {
console.log('📸 GET /slides/all');
try {
const [rows] = await db.query(
'SELECT * FROM slides ORDER BY `order` ASC'
);
res.json(rows);
} catch (err) {
console.error('❌ Ошибка получения всех слайдов:', err);
res.status(500).json({ message: 'Ошибка сервера', error: err.message });
}
});
// Загрузка изображения для слайда
router.post('/slides/upload', upload.single('image'), (req, res) => {
console.log('📸 POST /slides/upload');
console.log('📁 req.file:', req.file);
if (!req.file) {
return res.status(400).json({ message: 'Файл не загружен' });
}
const relPath = '/uploads/' + req.file.filename;
console.log('✅ Изображение загружено:', relPath);
res.json({ path: relPath });
});
// Создать слайд
router.post('/slides', async (req, res) => {
console.log('📸 POST /slides');
const { image_url, title, description, link, order, is_active } = req.body;
if (!image_url) {
return res.status(400).json({ message: 'image_url обязателен' });
}
try {
const [result] = await db.query(
`INSERT INTO slides (image_url, title, description, link, \`order\`, is_active, created_at, updated_at)
VALUES (?, ?, ?, ?, ?, ?, NOW(), NOW())`,
[image_url, title || null, description || null, link || null, order || 0, is_active !== undefined ? is_active : 1]
);
console.log('✅ Слайд создан, ID:', result.insertId);
res.json({ id: result.insertId, message: 'Слайд создан' });
} catch (err) {
console.error('❌ Ошибка создания слайда:', err);
res.status(500).json({ message: 'Ошибка сервера', error: err.message });
}
});
// Обновить слайд
router.put('/slides/:id', async (req, res) => {
console.log('📸 PUT /slides/' + req.params.id);
const { id } = req.params;
const { image_url, title, description, link, order, is_active } = req.body;
if (!image_url) {
return res.status(400).json({ message: 'image_url обязателен' });
}
try {
await db.query(
`UPDATE slides
SET image_url = ?,
title = ?,
description = ?,
link = ?,
\`order\` = ?,
is_active = ?,
updated_at = NOW()
WHERE id = ?`,
[image_url, title || null, description || null, link || null, order || 0, is_active !== undefined ? is_active : 1, id]
);
console.log('✅ Слайд обновлён, ID:', id);
res.json({ message: 'Слайд обновлён' });
} catch (err) {
console.error('❌ Ошибка обновления слайда:', err);
res.status(500).json({ message: 'Ошибка сервера', error: err.message });
}
});
// Удалить слайд
router.delete('/slides/:id', async (req, res) => {
console.log('📸 DELETE /slides/' + req.params.id);
const { id } = req.params;
try {
await db.query('DELETE FROM slides WHERE id = ?', [id]);
console.log('✅ Слайд удалён, ID:', id);
res.json({ message: 'Слайд удалён' });
} catch (err) {
console.error('❌ Ошибка удаления слайда:', err);
res.status(500).json({ message: 'Ошибка сервера', error: err.message });
}
});
// ============================================
// 📚 ОСТАЛЬНЫЕ МАРШРУТЫ (НИЖЕ)
// ============================================
// Получить все блоки для вкладки
router.get('/:tab', async (req, res) => {
const { tab } = req.params;
if (!['info', 'union', 'events', 'help', 'housing'].includes(tab)) return res.status(400).json({ message: 'Некорректная вкладка' });
try {
const [rows] = await db.query('SELECT * FROM content_blocks WHERE tab = ? ORDER BY created_at ASC', [tab]);
res.json(rows);
} catch (err) {
res.status(500).json({ message: 'Ошибка сервера' });
}
const { tab } = req.params;
if (!['info', 'union', 'events', 'help', 'housing'].includes(tab)) return res.status(400).json({ message: 'Некорректная вкладка' });
try {
const [rows] = await db.query('SELECT * FROM content_blocks WHERE tab = ? ORDER BY created_at ASC', [tab]);
res.json(rows);
} catch (err) {
res.status(500).json({ message: 'Ошибка сервера' });
}
});
// Загрузка файла (image/video)
router.post('/:tab/upload', requireModerator, upload.single('file'), (req, res) => {
if (!req.file) return res.status(400).json({ message: 'Файл не загружен' });
const relPath = '/uploads/' + req.file.filename;
res.json({ path: relPath });
if (!req.file) return res.status(400).json({ message: 'Файл не загружен' });
const relPath = '/uploads/' + req.file.filename;
res.json({ path: relPath });
});
// Добавить новый блок
router.post('/:tab', requireModerator, async (req, res) => {
const { tab } = req.params;
const { content } = req.body;
if (!['info', 'union', 'events', 'help', 'housing'].includes(tab)) return res.status(400).json({ message: 'Некорректная вкладка' });
try {
const [result] = await db.query(
'INSERT INTO content_blocks (tab, type, content, created_by, created_at, updated_at) VALUES (?, ?, ?, ?, NOW(), NOW())',
[tab, 'text', content, req.session.userId]
);
res.json({ id: result.insertId });
} catch (err) {
res.status(500).json({ message: 'Ошибка сервера' });
}
const { tab } = req.params;
const { content } = req.body;
if (!['info', 'union', 'events', 'help', 'housing'].includes(tab)) return res.status(400).json({ message: 'Некорректная вкладка' });
try {
const [result] = await db.query(
'INSERT INTO content_blocks (tab, type, content, created_by, created_at, updated_at) VALUES (?, ?, ?, ?, NOW(), NOW())',
[tab, 'text', content, req.session.userId]
);
res.json({ id: result.insertId });
} catch (err) {
res.status(500).json({ message: 'Ошибка сервера' });
}
});
// Обновить блок
router.put('/:tab/:id', requireModerator, async (req, res) => {
const { tab, id } = req.params;
const { content } = req.body;
if (!['info', 'union', 'events', 'help', 'housing'].includes(tab)) return res.status(400).json({ message: 'Некорректная вкладка' });
try {
await db.query(
'UPDATE content_blocks SET content = ?, updated_at = NOW() WHERE id = ? AND tab = ?',
[content, id, tab]
);
res.json({ message: 'Обновлено' });
} catch (err) {
res.status(500).json({ message: 'Ошибка сервера' });
}
const { tab, id } = req.params;
const { content } = req.body;
if (!['info', 'union', 'events', 'help', 'housing'].includes(tab)) return res.status(400).json({ message: 'Некорректная вкладка' });
try {
await db.query(
'UPDATE content_blocks SET content = ?, updated_at = NOW() WHERE id = ? AND tab = ?',
[content, id, tab]
);
res.json({ message: 'Обновлено' });
} catch (err) {
res.status(500).json({ message: 'Ошибка сервера' });
}
});
// Удалить блок
router.delete('/:tab/:id', requireModerator, async (req, res) => {
const { tab, id } = req.params;
if (!['info', 'union', 'events', 'help', 'housing'].includes(tab)) return res.status(400).json({ message: 'Некорректная вкладка' });
try {
await db.query('DELETE FROM content_blocks WHERE id = ? AND tab = ?', [id, tab]);
res.json({ message: 'Удалено' });
} catch (err) {
res.status(500).json({ message: 'Ошибка сервера' });
}
const { tab, id } = req.params;
if (!['info', 'union', 'events', 'help', 'housing'].includes(tab)) return res.status(400).json({ message: 'Некорректная вкладка' });
try {
await db.query('DELETE FROM content_blocks WHERE id = ? AND tab = ?', [id, tab]);
res.json({ message: 'Удалено' });
} catch (err) {
res.status(500).json({ message: 'Ошибка сервера' });
}
});
router.get('/section/:section', async (req, res) => {
const { section } = req.params;
if (!['events', 'help', 'housing'].includes(section)) {
@@ -106,7 +224,6 @@ router.get('/section/:section', async (req, res) => {
'SELECT * FROM content_blocks WHERE tab = ? ORDER BY created_at ASC',
[section]
);
// Если есть блоки — возвращаем их, иначе пустой массив
res.json(rows);
} catch (err) {
console.error(err);
@@ -114,7 +231,7 @@ router.get('/section/:section', async (req, res) => {
}
});
// Сохранить контент раздела (очищаем старые и вставляем новый)
// Сохранить контент раздела
router.post('/section/:section', requireModerator, async (req, res) => {
const { section } = req.params;
const { content } = req.body;
@@ -124,10 +241,8 @@ router.post('/section/:section', requireModerator, async (req, res) => {
}
try {
// Удаляем старые блоки для этого раздела
await db.query('DELETE FROM content_blocks WHERE tab = ?', [section]);
// Вставляем новый блок
const [result] = await db.query(
'INSERT INTO content_blocks (tab, type, content, created_by, created_at, updated_at) VALUES (?, ?, ?, ?, NOW(), NOW())',
[section, 'text', content, req.session.userId]
@@ -143,4 +258,5 @@ router.post('/section/:section', requireModerator, async (req, res) => {
res.status(500).json({ message: 'Ошибка сервера' });
}
});
module.exports = router;
module.exports = router;
Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 804 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 804 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB