【问题标题】:How to correctly execute this promise based SQL Query?如何正确执行这个基于 Promise 的 SQL 查询?
【发布时间】:2020-01-06 09:53:42
【问题描述】:

我正在使用 MySQL2 将我的 Node.js 应用程序与 MySQL 数据库连接起来。 不幸的是,尝试执行一些基于承诺的准备好的语句,我无法获得正确的函数设置,该设置要么在输入记录后成功返回,要么在出现问题时抛出错误。

关于如何修复以下代码的任何想法?


// Connection Settings
const connection = mysql.createConnection({
  host: process.env.DB_HOST,
  user: process.env.DB_USER,
  password: process.env.DB_PASSWORD,
  database: process.env.DB_DATABASE,
  port: process.env.DB_PORT
})

// Promise based SQL Prepared Statement
db.pps = ({ query, variables, error }) => {
  return new Promise((resolve, reject) => {
    connection.execute(query, variables, (err, results) => {
      if (err) {
        console.log(`Error: ${error} \n ${err.sqlMessage}`)
        return reject(err)
      }
      return resolve(results)
    })
  })
}

// Sign Up
auth.signup = (req, res) => {
  const query = `
    INSERT INTO User (Id, Email, Password)
    VALUES (UUID_TO_BIN(UUID()), ?, ?)
  `
  const variables = [req.query.email, req.query.password]

  db.promise({ query, variables }, (err, result) => {
    if (err) {
      res.status(400)
    }
    res.status(200)
  })
}

【问题讨论】:

  • 请告知出现了什么错误?

标签: javascript mysql sql node.js


【解决方案1】:

您可以使用如下的准备好的语句查询功能。

如果你没有在函数中使用 this

auth.signup = (req, res) => {
    const query = `
      INSERT INTO User (Id, Email, Password)
      VALUES (UUID_TO_BIN(UUID()), ?, ?)
    `
    const variables = [req.query.email, req.query.password]
    db.pps({ query, variables })
    .then(result => {
        res.status(200)
    })
    .catch( error => {
        res.status(400)
    }); 
  }

或者使用异步等待

auth.signup = async (req, res) => {
    const query = `
                    INSERT INTO User (Id, Email, Password)
                    VALUES (UUID_TO_BIN(UUID()), ?, ?)
                    `
    const variables = [req.query.email, req.query.password]
    try {
        await db.pps({ query, variables });
        res.status(200)
    } catch (err) {
        res.status(400)
    }
}

【讨论】:

    【解决方案2】:

    您必须进行 2 项更改:

    1.移除错误参数

    db.pps = ({ query, variables}) => {
    

    2。更改注册码如下

    auth.signup = (req, res) => {
      const query = `
        INSERT INTO User (Id, Email, Password)
        VALUES (UUID_TO_BIN(UUID()), ?, ?)
      `
      const variables = [req.query.email, req.query.password]
    
      db.pps({ query, variables }).then(response => {
        // Do stuff with users
      })
      .catch(err => {
        // handle errors
      })
    

    【讨论】:

      【解决方案3】:
      function pps( query, variables){
        return new Promise((resolve, reject) => {
          connection.execute(query, variables, (err, results) => {
            if (err) {
              console.log(`Error: ${error} \n ${err.sqlMessage}`)
              reject(err)
            }
            resolve(results)
          })
        })
      }
      
      auth.signup = (req, res) => {
          const query = `
            INSERT INTO User (Id, Email, Password)
            VALUES (UUID_TO_BIN(UUID()), ?, ?)
          `
          const variables = [req.query.email, req.query.password]
          pps(query, variables)
          .then(result => {
              res.status(200)
          })
          .catch( error => {
              res.status(400)
          }); 
        }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-10
        • 2015-04-17
        • 2014-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多