Documentation Home
MySQL 连接器/ODBC 发行说明  / MySQL 连接器/ODBC 版本 8.0 中的更改  /  MySQL Connector/Node.js 8.0.13 的变化(2018-10-22,正式发布)

MySQL Connector/Node.js 8.0.13 的变化(2018-10-22,正式发布)

添加或更改的功能

  • 为了补充现有的异步 mysqlx.getSession(conn_str)方法,添加了一个新的同步mysqlx.getClient(conn_str, options)方法;新方法创建一个连接池处理程序,它提供一个异步 getSession()方法来创建和检索池中的连接。此处列出了集合池选项:

    • enabled:启用或禁用连接池;一个默认为 true 的布尔值。

    • maxSize:池中可用的最大连接数;一个默认为 25 的正整数。

    • maxIdleTime:连接在关闭前可以在队列中空闲的最大毫秒数;一个非负整数,默认为 0(无限)。

    • queueTimeout:请求等待连接可用的最大毫秒数;一个非负整数,默认为 0(无限)。

      这与不connectTimeout使用连接池时使用的不同。当使用池时,池中可能已经有连接; queueTimeout控制等待来自池的连接的时间。

    例子:

    var mysqlx = require('@mysql/xdevapi')
    var client = mysqlx.getClient(
      { user: 'root', host: 'localhost', port: 33060 }, 
      { pooling: { enabled: true, maxIdleTime: 5000, maxSize: 25, queueTimeout: 20000 } }
    );
    
    client.getSession()
      .then(session => {
        console.log(session.inspect())
        return session.close() // the connection becomes idle in the client pool
      })
      .then(() => {
        return client.getSession()
      })
      .then(session => {
        console.log(session.inspect())
        return client.close() // closes all connections and destroys the pool
      })

    关闭附加到池的会话使池中的连接可用于后续 getSession()调用,同时关闭(即销毁)池有效地关闭了所有服务器连接。

  • mysqlx.getClient()向(池化)和 mysqlx.getSession()(无池化)接口 添加了连接超时查询参数 。此参数确定客户端等待 MySQL 服务器从给定网络地址变得可用的时间长度(以毫秒为单位)。默认值为 10000(10 秒)。将其设置为 0 会禁用超时,以便客户端等待底层套接字超时。套接字超时是平台相关的

    与其他连接器/Node.js 参数一样,kebab 大小写用于 URI 定义 ( connection-timeout),驼峰大小写用于 JavaScript 配置对象 ( connectionTimeout)。

    示例 1:

    const mysqlx = require('@mysql/xdevapi');
    var client = mysqlx.getClient('root@localhost?connect-timeout=5000')
    client.getSession()
        .catch(err => {
            console.log(err.message) // "Connection attempt to the server was aborted. Timeout of 5000 ms was exceeded."
        })

    示例 2:

    const mysqlx = require('@mysql/xdevapi');
    var client = mysqlx.getClient('mysqlx://root:passwd@[localhost:33060, 127.0.0.1:33060]?connect-timeout=5000')
    client.getSession()
        .catch(err => {
            // connection could not be established after 10 seconds (5 seconds for each server)
            console.log(err.message); // All server connection attempts were aborted. Timeout of 5000 ms was exceeded for each selected server.
        });

    使用多个主机时,该 connect-timeout值分别应用于每个主机。

修正错误

  • 通过正确记录然后忽略非致命错误,并在发生致命错误时使连接无法用于后续操作,改进了 X 协议全局通知的处理。(漏洞#28653781)

  • 调用getCollationName()非文本类型的列,例如throw TypeError: Cannot read property 'collat​​ion' ofINT undefined 。(漏洞 #28608923)

  • fields()方法不适用于该expr() 方法生成的有效表达式。(缺陷号 28409639)

  • 返回的Session.inspect()对象现在user除了 property 之外还 包括dbUserproperty;每个属性包含相同的值。(漏洞 #28362115)