首页 > 解决方案 > NodeJS / MariaDB 连接器——createConnection() 没有返回正确的连接对象

问题描述

Node.js 在我的 Ubuntu 18/04 机器上安装在以下版本中:

  node -v
  v14.16.0

安装了以下模块:

  sudo npm list -g --depth=0
  /usr/lib
  ├── mariadb@2.5.3
  └── npm@6.14.11

所需的包

我的应用程序文件 maria.js 中的相关代码如下所示:

const mariadb = require('mariadb');
let conn = mariadb.createConnection({
     host: 'localhost', 
     database: 'db1',
     user:'dbuser1', 
     password: 'dbpwd',
     port: 3306
});

conn.connect(function(err){
  if(err){
    console.log('Database connection error');
  }else{
    console.log('Database connection successful');
  }
});

满足所需的包“mariadb”并且 createConnection() 不返回错误。然而,进入 connect() 语句,NodeJS 返回以下内容:

conn.connect(function(err){
     ^

TypeError: conn.connect is not a function
    at Object.<anonymous> (/home/juerg/bin/node/maria.js:12:6)

所以看起来 createConnection() 返回一个空的 JS 对象。任何其他 Connection 类方法也不起作用,而且我无法在这个短代码片段中发现错误。

标签: mysqlnode.jsmariadb

解决方案


mariadb.createConnection 返回一个承诺,因此您必须await让它返回连接,例如:

let conn = await mariadb.createConnection({
     host: 'localhost', 
     database: 'db1',
     user:'dbuser1', 
     password: 'dbpwd',
     port: 3306
});

也可能不需要conn.connect()单独调用,因为它已经完成createConnection源代码

或者,如果您不想使函数异步,那么您可以执行以下操作:

mariadb.createConnection({
     host: 'localhost', 
     database: 'db1',
     user:'dbuser1', 
     password: 'dbpwd',
     port: 3306
}).then((conn) => {
     // Do here what you want to do with MySQL connection...
});

推荐阅读