Логика проверки данных получаемых из ПИ и базы данных на сервере

Здраствуйте, разрабатываю небольшой проект на Node.js, хотелось бы узнать чужое мнение насчет получения данных из базы данных и пользовательского интерфейса чтобы в дальнейшем проверять существуют ли такие данные.
К примеру у меня есть фетч-запрос на сервер который отсылает данные пользователя для аунтефикации:

function handleLogin(name, surname) {
    fetch(
      `http://localhost:3000/manager/log?name=${encodeURIComponent(
        name
      )}&surname=${encodeURIComponent(surname)}`,
      {
        method: "GET",
        headers: {
          "Content-Type": "application/json",
        },
      }
    )
      .then((response) => {
        if (response.ok) {
          if (typeof window !== "undefined") {
            window.location.href = response.url;
          } else {
            console.error("window is not defined");
          }
        } else {
          return response.json().then((data) => {
            errorMessage.textContent = data.error;
          });
        }
      })
      .catch((error) => {
        console.error("Error:", error);
      });
  }

А уже сервер обрабатывает запрос и делает GET запрос на БД:

app.get("/manager/log", async (req, res) => {
  try {
    const { name, surname } = req.query;
    const User = await pool.query(
      "SELECT * FROM users WHERE name = $1 AND surname = $2",
      [name, surname]
    );
    if (User.rows.length === 0) {
      return res.status(400).json({ error: "Invalid user" });
    }
    res.redirect(`/manager/${User.rows[0].id}`);
  } catch (err) {
    console.error(err.message);
    res.status(500).json({ error: err.message });
  }
});

Как я могу реализовать сравнение данных?
P.S есть еще один вопрос но о нем я напишу позже.

Отправлять приватные данные на сервер через GET запросы плохая идея (приватные данные видны в строке, get запросы могут быть кешированы прокси серверами). Всегда используют POST.

В реальности следование правилам зависит от ситуации. Иногда ломать правила можно. Но исходя из типа вопросов и кода нужно начать со следования им и их впитыванию-ощущению.

В целом код выглядит так что есть путь который может быть виден только пользователю с определенными правами и эти данные про самого пользователя.

Обычно такую задачу разделяют на две - аутенитификация пользователя (залогинится) и авторизация доступа к данным. Организуется следующим образом:

На пути /login показывать логин-пароль поля, отправлять их на сервер post-om (можно и без аяксов, просто формой). При успешном залогинивании редиректить пользователя на /manager.

На пути /manager если пользователь не залогинен (нет активной сессии) кидать на залогинивание /login. А если залогинен то брать айдишник пользователя из сессии и показывать соответствующие данные.

Данные хранишь в сессии, в куке, желательно http-only (во имя бОльшей безопасности, не давать доступ клиентскому коду к чтению значения куки). Код выглядит как express, но и у деривативов есть свои решения. Вот сессионный middleware для экспресса Express session middleware. Единственное что обрати внимание на secure:true - эта настройка требует https-а, и локально может не работать. Ее можно включать основываясь на переменной окружения которая отражает среду: dev, prod итд.

Мне не понятно о каких данных идет речь. В той форме как я описал выше исключена ситуация когда пользователь заправшивает потенциально несуществующие данные.

Так как в программе всё это данные (от прав пользователя до логов менеджера), то мне сложно понять о чем идет конкретная речь. Проверка наличия пользователя будет реализована одним образом, проверка наличия данных типа логов вторым.

Я лучше смогу тебе помочь если ты опишешь что система должна делать с точки зрения действи пользователя и реакций системы (я прихожу, открываю то-то, кликаю туда-то, меня не пускает, кликаю сюда - меня пускает, итд).

Отдельно хорошо и правильно что используешь библиотеку для формирования sql запросов а не просто строишь самостоятельно строку. Твой подход уберегает от sql-injection.

Пытаться продолжать докручивать больше кода вокруг app.get("/manager/log" блока кода не надо. Крайне советую перейти на аутентификацию и авторизацию. Но решение всегда за тобой.

Да, все верно. У меня есть 2 папки LoginUsers и NonLoginUsers (обе папки это пользовательские интерфейсы). В LoginUsers попадают только те кто аунтефиковался (те у кого есть айди) а во вторую соответственно попадают те у кого нету айди.

Данные о которых шла речь это строки “Name” и “Surname” которые указываються при регистрации или аунтефикации. При регистрации данные записываються в БД а при аунтефикации
проверяються сущестуют ли такие. Если же появляеться ошибка или таких данных вообще не существует то catch() возвращает ошибку, разве нет?

А зачем хранить данные в сесии если я в любом случае буду записывать в БД? Просто открывать/закрывать сесии мне ещё мало приходилось по этому мало в этом смыслю.