MySQL Node JS УДАЛИТЬ не работает - затронуто 0 строк - PullRequest
1 голос
/ 15 апреля 2020

Я пытаюсь создать почтовый маршрут, который удалит данные пользователя из нескольких таблиц. В mySQL верстаке я проверил, есть ли у пользователя базы данных эта привилегия. Однако, когда я нажимаю «Удалить» во внешнем интерфейсе, запросы выполняются, но строки не удаляются. Может кто-нибудь, пожалуйста, скажите мне, где я иду не так?

app.post('/disposal', redirectLogin, async(req, res) => {
      const user = res.locals;
      userStmt = `DELETE FROM users WHERE user_name ='${user.user_name}'`;
      cashStmt = `DELETE FROM CASH WHERE user_name ='${user.user_name}'`;
      tradesStmt = `DELETE FROM trades WHERE user_name ='${user.user_name}'`;
      holdingsStmt = `DELETE FROM trades WHERE user_name ='${user.user_name}'`;
      await connection.query(userStmt, (err, results) => {
        if (err) throw err;
        console.log(results);
        connection.query(holdingsStmt, (err, results) => {
          if (err) throw err;
          console.log(results);
          connection.query(cashStmt, (err, results) => {
            if (err) throw err;
            console.log(results);
          });
          connection.query(tradesStmt, (err, results) => {
            if (err) throw err;
            console.log(results);
          });
        });
      });
      req.session.destroy(err => {
        if (err) {
          return res.redirect("/dashboard");
        }
        res.clearCookie(SESS_NAME);
        res.send("Ninja disposed!");
      })
    })

Ответы [ 2 ]

1 голос
/ 15 апреля 2020

Мне нужно было изменить user = res.locals на {user} = res.locals, так как первый возвращался 'undefined', так как он не извлекался должным образом.

0 голосов
/ 15 апреля 2020

Вам не нужно вкладывать вызовы, если вы используете async/await. Поскольку res.locals является объектом, который содержит свойство user, вы должны получить свойство пользователя.

Вы можете получить его, используя синтаксис Object destructuring.

Попробуйте это.

app.post('/disposal', redirectLogin, async (req, res) => {
    const { user } = res.locals;
    userStmt = `DELETE FROM users WHERE user_name ='${user.user_name}'`;
    cashStmt = `DELETE FROM CASH WHERE user_name ='${user.user_name}'`;
    tradesStmt = `DELETE FROM trades WHERE user_name ='${user.user_name}'`;
    holdingsStmt = `DELETE FROM trades WHERE user_name ='${user.user_name}'`;
    try {
        let results = await connection.query(userStmt);
        console.log(results);
        let holdinResult = await connection.query(holdingsStmt);
        console.log(holdinResult);
        let cashResult = await connection.query(cashStmt);
        console.log(cashResult);
        let tradesResult = await connection.query(tradesStmt);
        console.log(tradesResult);
    } catch (error) {
        throw error
    }
    req.session.destroy(err => {
        if (err) {
            return res.redirect("/dashboard");
        }
        res.clearCookie(SESS_NAME);
        res.send("Ninja disposed!");
    })
})


...