52ky 发表于 2022-5-6 13:33:56

如何在 NodeJS 中创建查询 MySQL 的函数?

问题
我这样做了:
const mysql = require('mysql2/promise')

const pool = mysql.createPool({
    host: 'localhost',
    user: 'root',
    password: '',
    database: 'nodejs',
    waitForConnections: true,
    connectionLimit: 10,
    queueLimit: 0
})

async function query(query) {

    const result = await pool.query(query)
    return result

}

console.log(query('SELECT * FROM `users`'))

我回来了

承诺{ <待定> }

如何从查询数据库中获取结果,就像 PHP 一样?

在 PHP 中,我从来没有做过像 async/await 和 promises 这样的事情。 . .

我也尝试过使用 mysql:
const mysql = require('mysql')

const db = mysql.createConnection({
    host   : 'localhost',
    user   : 'root',
    password : '',
    database : 'nodejs'
})

function query(query) {
    db.query(query, (err, result) => {
      if (err) throw err
      return result
    })
}

console.log(query('SELECT * FROM `users`'))
但我得到一个未定义的结果

回答
我对 MySQL 和您正在使用的库不是很熟悉。

然而,你得到了一个 Promise { <pending> } 响应,因为您没有等待查询执行。

由于该函数被标记为 async 并且还执行异步操作,因此它返回一个需要等待解决的 Promise。

下面的代码应该可以工作:
const mysql = require('mysql2/promise')

const pool = mysql.createPool({
    host: 'localhost',
    user: 'root',
    password: '',
    database: 'nodejs',
    waitForConnections: true,
    connectionLimit: 10,
    queueLimit: 0
})

async function query(query) {

    const result = await pool.query(query)
    return result

}

(async () => {
    const queryResult = await query('SELECT * FROM `users`');
    console.log(queryResult);
} )();

要了解 async await 的工作原理,请考虑以下代码:
console.log('I will get printed first');
const asyncFunction = async () => {
   await setTimeout(()=> {}, 1000)
   console.log('I will get printed third');
   return 'hello'
}

(async () => {
const result = await asyncFunction();
console.log(`I will get printed last with result: ${result}`);
})();

console.log('I will get printed second');
console.log 语句将在执行前等待它完成执行。



页: [1]
查看完整版本: 如何在 NodeJS 中创建查询 MySQL 的函数?