#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. Опять же, вы уверены, что используете этот файл базы данных? Поэтому добавьте запись вручную с помощью инструмента базы данных, затем запустите приложение и попробуйте добавить запись вручную. Вы получаете эту запись через экспресс-приложение?