Проверьте наличие ошибки во время запроса к базе данных и верните ее в асинхронном вызове в экспресс - PullRequest
0 голосов
/ 05 июля 2019

Я использую модули npm sqlite3 .

Если кто-то откроет мой сайт, я хочу выполнить 2 sqlite-запроса.Если в первом или втором запросе возникает ошибка, я хочу, чтобы экспресс-приложение ответило кодом состояния 404 и некоторым текстом.

Проблема: я не могу вернуться из всего этого.Если в первом и втором запросах есть ошибки, будет выполнено и res.status(404).end.И попытка вызвать end () 2 раза приведет к сбою приложения.

router.get("/", (req, res) => {
  //...
  db.serialize(() => {
    db.run("INSERT INTO modul...", (err) => {
      if (err) { res.status(404).end("An error occured during insertion"); return; }
    });

    db.get("SELECT * FROM modul...", (err, row) => {
      if (err) { res.status(404).end("An error occured during selection"); return; }
      res.json({ module: row });
    });
  });
});

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

Ответы [ 2 ]

1 голос
/ 05 июля 2019

Вы можете проверить первоначальную ошибку и пропустить запуск второй, если это произойдет:

router.get("/", (req, res) => {
    db.serialize(() => {
        db.run("INSERT INTO modul...", (err) => {
            if (err) { 
                res.status(404).end("An error occured during insertion"); 
            } else {
                db.get("SELECT * FROM modul...", (err, row) => {
                    if (err) { res.status(404).end("An error occured during selection"); return; }
                    res.json({ module: row });
                });
            }
        });
    });
});
0 голосов
/ 05 июля 2019

Пожалуйста, посмотрите на этот код:

router.get("/", async (req, res) => {
  //...
  return db.serialize(async () => {
    try {
        await db.run("INSERT INTO modul...");
        const row = await db.get("SELECT * FROM modul...");
        return res.json({ module: row });
    } catch (e) {
        return res.status(404).end("An error occured during insertion");
    }
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...