Koa2连接数据库时找不到query方法?

问题描述

使用Koa2连接数据库时,使用Promise和async-await封装了query方法,但是发现找不到query方法了。

相关代码

//query.js
const mysql = require("mysql");
const MYSQL_CONFIG = require("./mysql_config");

const pool = mysql.createPool(MYSQL_CONFIG);

const query = (sql, val) => {
  return new Promise((resolve, reject) => {
    pool.getConnection(function (err, connection) {
      if (err) reject(err);
      else {
        connection.query(sql, val, (err, fields) => {
          if (err) reject(err);
          else resolve(fields);
          connection.release();
        });
      }
    });
  });
};

module.exports = { query };
//app.js
const Koa = require("koa");
const router = require("koa-router")();
const query = require("./mysql/query"); //引入封装好的异步查询方法
const { QUERY_DATAS } = require("./mysql/sql"); //按需引入封装好的sql语句

const app = new Koa();
let res = query(QUERY_DATAS("admin"));
console.log(res);

module.exports = router;

报错

image.png

尝试debug

诡异的事情发生了
console.log(query)--
image.png
再试试
console.log(query.__proto__)--
image.png

问题

为什么会找不到query方法?

解决方法

在app.js中写一个async函数,在其中使用await接收返回的 promise 对象

const app = new Koa();
let dealRes = async () => {
  let res = await query(QUERY_DATAS("admin"));
  return res;
};

dealRes().then((res) => {
  console.log(JSON.stringify(res[2].trueName));
});
阅读 2.2k
1 个回答
const { query }= require("./mysql/query"); //引入封装好的异步查询方法

或者上面不改,
改这里

let res = query.query(QUERY_DATAS("admin"));

或者不改上面的两个,而是改这里

module.exports = query

以上三个地方选一个地方改应该就OK了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题