Изменения узла SQLite3 не сохранены

#node.js #sqlite #express

Вопрос:

Контекст: Я работаю над веб-приложением с бэкендом Express (Express и SQLite в качестве базы данных)
Проблема: Если я выполняю вызов API для обновления некоторых строк в базе данных, это (кажется) работает. Если я запрошу его, поля будут обновлены. Но если я остановлю/перезапущу экспресс-приложение, изменения будут сброшены.

Моя функция SQLite

 import sqlite3 from "sqlite3";
import path from "path";
import { logger as _logger } from "../Shared";

let db: sqlite3.Database;

export const OpenDatabase = () => db = new sqlite3.Database(path.resolve(__dirname, 'cmsfm.sqlite3'), sqlite3.OPEN_READWRITE);
export const CloseDatabase = () => db.close();

export const SQLiteQuery = async (query: string) => new Promise((resolve, reject) => {
    OpenDatabase();
    db.all(query, (err, row) => {
        if (err) {
            reject(err);
        } else {
            resolve(row);
        }
    })
    CloseDatabase();
});

 

Реализация (Get):

 const fahrzeug = await SQLiteQuery(
    `SELECT ${req.query.resultField} FROM fahrzeugdaten WHERE ${req.query.findBy} = "${req.query.find}"`
);
res.send(fahrzeug).status(200).end();
 

Внедрение (Обновление)

 SQLiteQuery(
    `UPDATE fahrzeugdaten SET ${req.query.update} = "${req.query.value}" WHERE ${req.query.findBy} = "${req.query.find}"`
);
 

У кого-нибудь есть знакомая проблема?

Комментарии:

1. Сначала установите любой инструмент для просмотра вашей базы данных SQLite и используйте его, чтобы убедиться, что ваши обновления действительно сохранены. Затем перезапустите приложение и убедитесь, что это не приведет к изменению вашей базы данных. Если все сохранено, проверьте реализацию Get, кэш клиента или что-то еще.

2. @Serg, я сделал это — данные не сохраняются! Но в чем может быть проблема? Я проверяю через Бессонницу.

3. Проверьте, не обновили ли вы другую базу данных (неправильный путь), и проверьте, есть ли у вас разрешения на файл базы данных. Также попробуйте обновить все записи — исключить where из вашего запроса — возможно, вы пытаетесь обновить запись, которая не является wxist.

4. В этом каталоге есть только один файл базы данных SQLite. Чтобы убедиться в этом, я примерил его Gitpod.io . Инструкции SELECT, UPDATE, INSERT и DELETE работают правильно, но почему-то не сохраняются в базе данных. Каждый раз, когда я перезагружаю экспресс-приложение, все изменения сбрасываются.

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