【问题标题】:Nodejs MySQL Query sync?Nodejs MySQL查询同步?
【发布时间】:2020-11-03 15:08:06
【问题描述】:

我需要一个带有 mysql 的 nodejs 中的 select 语句。在此之后,我想“console.log()”-something。

我的代码:

con.query("SELECT l.id, l.name FROM country l ORDER by l.id", function(err, land, fields)
{
     console.log(land);
});
console.log("Hello World");

我的输出:

"Hello World"
RowDataPackets

我需要这个输出:

RowDataPackets
"Hello World"

我该怎么做?

【问题讨论】:

标签: javascript mysql sql node.js


【解决方案1】:

对于顺序执行,您需要使用 async-await

你可以这样写数据库文件

        const util = require('util')
        const mysql = require('mysql')
        const pool = mysql.createPool({
          connectionLimit: 10,
          host: 'localhost',
          user: 'root',
          password: 'password',
          database: 'my_database'
        })

        // Ping database to check for common exception errors.
        pool.getConnection((err, connection) => {
          if (err) {
            if (err.code === 'PROTOCOL_CONNECTION_LOST') {
              console.error('Database connection was closed.')
            }
            if (err.code === 'ER_CON_COUNT_ERROR') {
              console.error('Database has too many connections.')
            }
            if (err.code === 'ECONNREFUSED') {
              console.error('Database connection was refused.')
            }
          }

          if (connection) connection.release()

          return
            })

            // Promisify for Node.js async/await.
            pool.query = util.promisify(pool.query)

            module.exports = pool

然后只要你可以像这样在导入后使用。

        const db= require('./database')
        route.post('/users',async function(){
              try{
                let result = await db.query('SELECT l.id, l.name FROM country 
       l ORDER by l.id');
             }catch(err){
              console.log(err);
             }
         });

了解异步等待:

Understanding async/await on NodeJS

https://javascript.info/async-await

【讨论】:

    【解决方案2】:

    查询完成后要显示的任何内容都必须出现在来自.query() 函数的回调中:

    {
         console.log(land);
         console.log("Hello World");
    });
    

    正如您所发现的,.query() 立即返回其调用者,并通过稍后调用回调函数让您知道它已完成。

    【讨论】:

    • 不这样做怎么可能?
    • 如果你想要顺序执行那么你需要使用异步等待学习stackoverflow.com/questions/44512388/…
    • Javascript 中的大多数客户端-服务器操作(如 SQL 查询)本质上是异步的。您可以使用回调、Promises 和/或 async / await 来管理异步性。 (async/await 基本上是一种易于阅读的 Promises 语法。)但是。如果你不想处理异步操作,你唯一的办法就是避免使用 Javascript。
    猜你喜欢
    • 2023-03-28
    • 2018-08-12
    • 2020-10-22
    • 2020-07-08
    • 2016-03-22
    • 2017-05-23
    • 2020-06-19
    • 2017-06-06
    • 2023-03-26
    相关资源
    最近更新 更多