Сервер продолжает получать старый результат

1

После добавления пользователя новый пользователь не отображается в списке. Все работает только после перезапуска сервера. Похоже, сервер загружает данные из кэш-памяти. Возможно, мой код написан неправильно. Как получить текущие данные из базы данных?

// addFile

const sqlite3 = require("sqlite3").verbose();
const db = new sqlite3.Database("./db/dbSqlite/app.db", sqlite3.OPEN_READWRITE);

const add = (user) => {
  return new Promise((res, rej) => {
    db.serialize(() => {
      let status = false;
      db.run('INSERT INTO users(
        login,
        password,
        ) VALUES(?, ?)', user, (err) => {
        if (err) rej(status);
        status = true;
        res(status);
      });
    })
  })
}
module.exports = add;

// getAll file

const sqlite3 = require("sqlite3").verbose();
const db = new sqlite3.Database("./db/dbSqlite/app.db");

const getAll = new Promise((res, rej) => {
  db.all('SELECT * from users', (err, row) => {
    if (row === undefined || err) {
      res("NO_TABLE_USERS");
    } else {
      const stringified = JSON.stringify(row)
      res(JSON.parse(stringified));
    }
  });
})

module.exports = getAll

// route

router.post("/add", helper.isLoggedIn, helper.isAdmin, (req, res) => {
  let msg = "User created successfully!";
  user.add(Object.values(req.body)
    .then((state) => {
      if (!state) msg = "Name already used!";
      user.getAll
        .then((result) => res.render("users", {
          name: req.user,
          users: result,
          msg: msg
        }));
    }));
});
  • 0
    Я предполагаю, что вы вызываете getAll () после того, как add () возвращает обещание, верно?
  • 1
    getAll должен быть функцией, иначе он будет разрешен один раз. Так же, как add на самом деле.
Показать ещё 4 комментария
Теги:
sqlite3

1 ответ

2
Лучший ответ

getAll должен быть функцией, как и с add. В противном случае getAll будет разрешен один раз:

// addFile

const sqlite3 = require("sqlite3").verbose();
const db = new sqlite3.Database("./db/dbSqlite/app.db", sqlite3.OPEN_READWRITE);

const add = (user) => {
  return new Promise((res, rej) => {
    db.serialize(() => {
      let status = false;
      db.run('INSERT INTO users(
        login,
        password,
        ) VALUES(?, ?)', user, (err) => {
        if (err) rej(status);
        status = true;
        res(status);
      });
    })
  })
}
module.exports = add;

// getAll file

const sqlite3 = require("sqlite3").verbose();
const db = new sqlite3.Database("./db/dbSqlite/app.db");

const getAll = () => {
  return new Promise((res, rej) => {
    db.all('SELECT * from users', (err, row) => {
      if (row === undefined || err) {
        res("NO_TABLE_USERS");
      } else {
        const stringified = JSON.stringify(row)
        res(JSON.parse(stringified));
      }
    });
  });
}

module.exports = getAll

// route

router.post("/add", helper.isLoggedIn, helper.isAdmin, (req, res) => {
  let msg = "User created successfully!";
  user.add(Object.values(req.body)
    .then((state) => {
      if (!state) msg = "Name already used!";
      user.getAll()
        .then((result) => res.render("users", {
          name: req.user,
          users: result,
          msg: msg
        }));
    }));
});
  • 1
    Спасибо, Серж. Кажется, сейчас работает! Я принял ваш ответ

Ещё вопросы

Сообщество Overcoder
Наверх
Меню