使用 mysql 和 bcryptjs 时出现意外标识符语法错误

Unexpected identifier Syntax Error when using mysql and bcryptjs

我在我的 Express 应用中使用 Mysql 我在 mysql db 中使用 bcryptjs 对用户进行了哈希处理,结果很好。 使用此代码:

// register
router.post("/register", async (req, res) => {
  const hashed = await bcrypt.hash(req.body.pass, 10);
  const user = {
    uname: req.body.uname,
    phone: req.body.phone,
    pass: hashed
  };
  let sql = "INSERT INTO user SET ? ";
  db.query(sql, user, (err, result) => {
    if (err) throw err;
    console.log(`${user.uname} INSERTED INTO users`);
  });
});
// GET USERS
router.get("/users", (req, res) => {
  db.query("SELECT * FROM user", (err, results) => {
    if (err) {
      return res.send(err);
    } else {
      return res.json({
        data: results
      });
    }
  });
});

但是当我想登录用户并让 bcrypt 将请求的通行证与用户通行证进行比较时,它会给我这个错误: SyntaxError: Unexpected identifier

这就是我尝试过的:

// loggin
router.post("/login", async (req, res) => {
  var username = req.body.uname;
  var password = req.body.pass;
  db.query(
    "SELECT pass FROM user WHERE uname = ?",
    [username],
    (err, result, fields) => {
      try {
        if (await bcrypt.compare(password, result)) {
          console.log('Success')
        }
      } catch {
        console.log('catched')
      }
    }
  );
});

出现错误的唯一原因,是因为您在没有 async

的函数中使用 await

您可以使用下面的代码:

router.post("/login", async (req, res) => {
  var username = req.body.uname;
  var password = req.body.pass;
  db.query(
    "SELECT pass FROM user WHERE uname = ?",
    [username],
    async (err, result, fields) => {
      try {
        // if you're using mysql2, don't forget to change `result` with `result[0].pass`.
        // you can console.log(result) to see where is the field of your password plain text
        const isPassword = await bcrypt.compare(password, result);
        console.log(isPassword); // true
      } catch(ex) {
        console.log(ex); // false
      }
    }
  );
});

希望对您有所帮助。