【问题标题】:How to catch connection error with NodeJs MySql2 library async/await如何使用 NodeJs MySql2 库 async/await 捕获连接错误
【发布时间】:2019-12-19 12:51:54
【问题描述】:

NPM and GitHub 上的文档没有说明如何在建立连接时捕获异常。我在猜测,基于查询方法的工作原理。所以作为一个新图书馆的新手,我是否必须阅读代码才能弄清楚?还是我缺少一些常见的标准做法?我故意输入错误密码只是为了测试错误处理。

我应该执行 try/catch,还是期望返回一个 err 对象?如果他们在查询方法上返回一个 err 对象而不是在连接方法上,是否不一致?

使用 Amazon AWS Aurora 作为数据存储。

const mysql = require('mysql2/promise'); 获取数据();

async function GetData() {

    const config = require("config");
    const dbConfig =  config.get('AWS.Database01TestErr');  
    console.log ("const dbConfig:"); 
    console.dir(dbConfig, { depth: null });

    const [errConn, connection] = await mysql.createConnection(dbConfig);
    if (errConn) throw errConn;
    mysql.createConnection(dbConfig);
    console.log ("Got the database connection"); 

    //query = "select ID, user_nicename, user_email from wp_users where user_login = 'hebgadmin' ";
    query = "select ID, user_nicename from wp_users limit 3 ";
    console.log ("Starting query"); 

    const [rows, fields, err] = await connection.query (query); 
    if (err) throw err;
    // console.log(rows); 

    console.log("Show Data Retrieved");   
    rows.map(e=>{ 
          console.log("ID="+ e.ID + " NiceName=" + e.user_nicename); 
     })   

    console.log ("The end"); 
    process.exit();   // Else Node hangs and must hit cntl-break to exit 

} 

部分输出:

(节点:2836)UnhandledPromiseRejectionWarning:错误:访问被拒绝 用户'adm test1'@'10.1.2.123'(使用密码:YES) 在 Object.createConnection (D:\Project2\POC\node_modules\mysql2\promise .js:223:31) 在 GetData (D:\Project2\POC\mySqlQuery_V3_Await.js:34:44)

【问题讨论】:

    标签: node.js async-await shared-libraries


    【解决方案1】:

    是的 try...catch 是带有 async/await 的模式

    这是对错误进行了一些讨论的 mdn:

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function

    这里是来自 mongodb 文档的类似代码,显示 try...catch:

    http://mongodb.github.io/node-mongodb-native/3.2/reference/ecmascriptnext/crud/

    【讨论】:

    【解决方案2】:
    function connect() {    
      return new Promise((resolve, reject) => {
    
        let connection = mysql.createConnection({
          host: 'hostname',
          user: 'username',
          password: 'password',
          database: 'db'
        })
    
        connection.connect(err => {
          if (err) {
            reject(err)
          } else {
            resolve(true)
          }
        })  
    
      })
    }
    

    【讨论】:

      猜你喜欢
      • 2016-02-07
      • 2020-01-06
      • 1970-01-01
      • 1970-01-01
      • 2020-06-02
      • 1970-01-01
      • 2020-09-07
      • 2020-10-17
      • 1970-01-01
      相关资源
      最近更新 更多