Как сделать функцию для запроса MySQL в NodeJS? - PullRequest
1 голос
/ 17 апреля 2020

Я сделал это:

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[0]

}

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

и получил обратно

Promise { <pending> }

Как я могу вернуть свои результаты от запроса к базе данных, как может PHP?
В PHP Мне никогда не приходилось делать такие вещи, как асинхронизация / ожидание и обещания ...

Я также пытался использовать 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`'))

, но я получил неопределенный результат

Ответы [ 3 ]

2 голосов
/ 17 апреля 2020

Я не очень знаком с MySQL и используемыми вами библиотеками.

Однако полученный вами ответ Promise { <pending> } состоит в том, что вы не ожидали выполнения запроса.

Поскольку функция помечена как async и также выполняет асинхронное действие c, она возвращает Обещание, которое необходимо дождаться, чтобы его разрешить.

Приведенный ниже код должен работать :

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[0]

}

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

Чтобы понять, как работает asyn c -wait, рассмотрите следующий код:

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 I will get printed last with result будет ожидать asyncFunction завершить выполнение перед выполнением.

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

попробуйте это:

var mysql = require('mysql');

var con = mysql.createConnection({
    host: "localhost",
    user: "yourusername",
    password: "yourpassword",
    database: "mydb"
});

// function definition
function runQuery (con, sqlQuery) {

    return new Promise((resolve, reject) => {
        console.log("START");
        if(con){
            con.connect(function (err) {
                if (err) throw err;
            });

            if (sqlQuery) {
                con.query(sqlQuery, function (error, result, fields) {
                    connection.end(); // end connection
                    if (error) {
                        throw error;
                    } else {
                        return resolve(result);
                    }
                });
            } else {
                connection.end(); // end connection
                // code:  handle the case 
            }
        } else {
            // code: handle the case
        }

    });

}

var sqlQuery = 'SELECT * FROM tableName';

// function call and pass the connection and sql query you want to execute
var p  = runQuery(con, sqlQuery); 
p.then((data)=>{ // promise and callback function
    console.log('data :', data); // result
    console.log("END");

});
0 голосов
/ 17 апреля 2020

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

var mysql = require('mysql');

var con = mysql.createConnection({
  host: "localhost",
  user: "yourusername",
  password: "yourpassword",
  database: "mydb"
});

con.connect(function(err) {
  if (err) throw err;
  con.query("SELECT * FROM customers", function (err, result, fields) {
    if (err) throw err;
    console.log(result);
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...