Экспресс с управлением данными JSON - PullRequest
0 голосов
/ 03 октября 2018

Я использую зависимость lowDB для управления данными JSON с помощью Express, и на самом деле это работает.Но есть ошибка, и я не могу найти, как ее решить.

Я создаю / создаю страницу для добавления информации в файл JSON, и она содержит 4 кнопки формы и отправки.

И в экспресс-якод, как это.данные каждой формы сохранят их в переменной и передадут с помощью модуля lowdb.

router.post('/post', function (req, res) {
  let pjName = req.body.projectName;
  let pjURL = req.body.projectURL;
  let pjtExplanation = req.body.projectExplanation;
  let pjImgURL = req.body.projectImgURL;
  console.log(pjName);
  db.get('project').push({
    name: pjName,
    url: pjURL,
    explanation: pjtExplanation,
    imgurl: pjImgURL
  }).write();
  console.log(db.get('project'));
  console.log(db.get('project').value());
  res.redirect('/');
})

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

1 Ответ

0 голосов
/ 03 октября 2018

Как вы, возможно, уже знаете, lowdb сохраняет данные во вторичной памяти (hdd) и может возвращать обещание в зависимости от вашей среды при вызове метода write. Как указано в документе

Сохраняет базу данных, используя adapter.write (в зависимости от адаптера может возвращать обещание).

Таким образом, данные могут все еще записываться, когда вы их читаете, поэтому старые данные запрашиваются.Попробуйте это,

db.get('project').push({
    name: pjName,
    url: pjURL,
    explanation: pjtExplanation,
    imgurl: pjImgURL
}).write().then(() => {
    console.log(db.get('project'));
    console.log(db.get('project').value());
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...