connection.query(...).then 不是函数

Posted

技术标签:

【中文标题】connection.query(...).then 不是函数【英文标题】:connection.query(...).then is not a function 【发布时间】:2019-02-10 12:49:21 【问题描述】:

我是节点 js 的新手。我在我的后端使用带有 express 的 node 和 mysql 作为数据库。我在处理异步调用时感到困惑。在我使用的代码中。

return connection.query(qry).then(
        function(result) 
          console.log('Query executed');
          resolve(result.rows[0]);
        ,
        function(err) 
          console.log('Error occurred', err);
          reject(err);
        
  )

我收到错误

connection.query(qry, function (err, rows, fields) 

);

正确执行。 简单的查询我没有遇到任何问题。在执行复杂查询时,上述查询不等待完整的查询执行

【问题讨论】:

我认为 Mysql.query 不是一个promise函数。 Mongo DB 是和其他的,但 MySQL 不是。见这里:codeburst.io/node-js-mysql-and-promises-4c3be599909b 【参考方案1】:

要首先将.then() 与mysql 一起使用,您需要“承诺”数据库客户端。这可以通过为MySQL 客户端创建一个包装类来完成。 检查此article 以获得更好的理解

【讨论】:

【参考方案2】:

我还没有发现,我们可以使用带有connection.query('') 函数的promise。根据 mysqljs 文档,我们可以传递回调函数来获取结果。

var mysql      = require('mysql');
var connection = mysql.createConnection(...);

connection.query('SELECT * FROM table_name', function (error, results, fields) 
  if (error) throw error;

  console.log(result);
);

【讨论】:

【参考方案3】:

你需要导入mysql,还要实际创建连接。

只要做:

  var mysql=require('mysql');
    var connection=mysql.createConnection(
      host:'127.0.0.1',
      port: '3306',
      user:'root',
      password:'12345',
      database:'db'
    );

    connection.connect(function(error)
      if(!!error)
        console.log(error);
      else
        console.log('Connected!:)');
      
    );

【讨论】:

以上是关于connection.query(...).then 不是函数的主要内容,如果未能解决你的问题,请参考以下文章

connection.query 不是一个函数 Node.js MySQL

将新键值添加到 Connection.query 结果

JS 无法查询 MySQL 数据库。错误:connection.query 不是函数

小白求解nodejs+mysql怎么解决嵌套connection.query问题

获取node异步执行结果的方式

mysqli_query 的用法和my_sqliconnect的用法