【问题标题】:How to handle promise handing error in mysql? (Debian, VMWARE)如何处理mysql中的promise处理错误? (Debian,VMWARE)
【发布时间】:2022-01-22 15:06:23
【问题描述】:

所以我尝试在使用 MySQL 数据库的登录应用程序中使用实现 argon2。在收到承诺处理错误时,我设法将用户名及其哈希密码存储在数据库中。但是我无法通过 Postman 传递参数来使用相同的用户名和密码登录,因为我得到了同样的错误。

到目前为止,这是我的代码:

server.js

const express = require("express");

const app = express();
const bodyParser = require("body-parser");
app.use(bodyParser.json({ type: "application/json" }));
app.use(bodyParser.urlencoded({ extended: true }));

app.set("port", 8080);
const argon2 = require("argon2");
const Pool = require("mysql2").createPool;
const config = {
  host: "localhost",
  user: "root",
  password: "XXXXX",
  database: "XXXXX"
};

const pool = new Pool(config);

app.post("/login", async (req, res) => {
  console.log(req.body);
  const username = req.body.username;
  const password = req.body.password;
  try {
    const query = "SELECT password from adminlogin where username = ?";
    const result = await pool.query(query, [username]);
    if (result.rowCount == 1) {
      console.log(result.rows[0].password);
      if (await argon2.verify(result.rows[0].password, password)) {
        res.json("Log In successful");
      } else {
        res.json("Password incorrect");
      }
    } else {
      res.json("username not found");
    }
  } catch (err) {
    console.log("ERROR " + err);
  }
});

app.post("/create", async (req, res) => {
  let hash;
  const username = req.body.username;
  const password = req.body.password;
  try {
    hash = await argon2.hash(password, "abcdefghijklmnop");
    console.log("HASH " + hash);
    const query = "INSERT INTO adminlogin (username, password) VALUES (?, ?)";
    const result = await pool.query(query, [username, hash]);
    //console.log(result);
    if (result.rowCount == 1) {
      res.json("User created");
    } else {
      res.json("User not created");
    }
  } catch (err) {
    console.log("ERROR " + err);
    if (err.message.search("duplicate") != -1) {
      res.json("Username taken");
    }
  }
}); 

错误信息:

您尝试调用 .then()、.catch() 或对非 Promise 的查询结果调用 await,这是一个编程错误。尝试调用 con.promise().query() 或 require('mysql2/promise') 而不是 'mysql2' 以获得查询接口的 Promise 兼容版本。要了解如何使用 async/await 或 Promises,请查看 https://www.npmjs.com/package/mysql2#using-promise-wrapper 的文档或 https://github.com/sidorares/node-mysql2/tree/master/documentation/Promise-Wrapper.md 的 mysql2 文档 ERROR 错误:您尝试调用 .then()、.catch() 或对非 Promise 的查询结果调用 await,这是一个编程错误。尝试调用 con.promise().query() 或 require('mysql2/promise') 而不是 'mysql2' 以获得查询接口的 Promise 兼容版本。要了解如何使用 async/await 或 Promises,请查看 https://www.npmjs.com/package/mysql2#using-promise-wrapper 的文档或 https://github.com/sidorares/node-mysql2/tree/master/documentation/Promise-Wrapper.md 的 mysql2 文档

【问题讨论】:

    标签: mysql node.js express debian vmware


    【解决方案1】:

    问题是你使用的是 MySQL npm 包,当你使用 pool.query() 时它没有返回任何承诺,它返回一个回调。我也遇到过同样的情况。尝试将其用作pool.query(query, [username], (err, result)=>{}) 之类的传统回调函数。并将结果作为该函数中的回调返回。希望这对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2014-03-15
      • 2019-02-17
      • 2016-09-29
      • 2019-01-05
      • 2016-04-20
      • 2016-06-08
      • 1970-01-01
      • 2021-02-19
      相关资源
      最近更新 更多