node.js mysql pool connection with async/ await

后端 未结 6 2098
清酒与你
清酒与你 2020-12-18 04:05

Is there a way to use pool.getConnection() taken from the mysqljs/mysql lib with the async/ await syntax?

The idea is to have a method whic

6条回答
  •  悲&欢浪女
    2020-12-18 04:51

    Share my working example:

    I use this Promisified MySQL middleware for Node.js

    read this article Create a MySQL Database Middleware with Node.js 8 and Async/Await

    here is my database.js

    var mysql = require('mysql'); 
    
    // node -v must > 8.x 
    var util = require('util');
    
    
    //  !!!!! for node version < 8.x only  !!!!!
    // npm install util.promisify
    //require('util.promisify').shim();
    // -v < 8.x  has problem with async await so upgrade -v to v9.6.1 for this to work. 
    
    
    
    // connection pool https://github.com/mysqljs/mysql   [1]
    var pool = mysql.createPool({
      connectionLimit : process.env.mysql_connection_pool_Limit, // default:10
      host     : process.env.mysql_host,
      user     : process.env.mysql_user,
      password : process.env.mysql_password,
      database : process.env.mysql_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
    

    You must upgrade node -v > 8.x

    you must use async function to be able to use await.

    example:

       var pool = require('./database')
    
      // node -v must > 8.x, --> async / await  
      router.get('/:template', async function(req, res, next) 
      {
          ...
        try {
             var _sql_rest_url = 'SELECT * FROM arcgis_viewer.rest_url WHERE id='+ _url_id;
             var rows = await pool.query(_sql_rest_url)
    
             _url  = rows[0].rest_url // first record, property name is 'rest_url'
             if (_center_lat   == null) {_center_lat = rows[0].center_lat  }
             if (_center_long  == null) {_center_long= rows[0].center_long }
             if (_center_zoom  == null) {_center_zoom= rows[0].center_zoom }          
             _place = rows[0].place
    
    
           } catch(err) {
                            throw new Error(err)
           }
    

提交回复
热议问题