使用promise mysql导出mysql连接以与node/express中的其他模块一起使用?

szqfcxe2  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(266)

正在尝试导入并使用我的一个控制器中的数据库模块。初始连接已记录,但是,当从浏览器点击任何路由时,我收到以下错误:
“无法读取未定义的属性'query'”
database.js文件中的连接变量显然没有被设置,但就我的一生而言,我不知道为什么。
数据库.js

const mysql = require("promise-mysql");
const config = require("../config");

let connection;

mysql.createConnection(config.MYSQL)
.then(conn => {
  connection = conn
  console.log('Connected to ', config.MYSQL.database)
})
.catch(function (error) {
  console.log(error)
})

module.exports = connection;

学校.js

const router = require('express').Router()
const Schools = require('../controllers/schools-controller')

const schools = new Schools

router.get('/', schools.getAllSchools)
...

module.exports = router

学校控制器.js

const db = require("../lib/database");

module.exports = class Schools {

 async getAllSchools (req, res, next) {

  const queryString = 'SELECT * FROM schools ORDER BY school_id ASC LIMIT 5'

  try {
    const results = await db.query(queryString);
    if (results == "") {
     res.status(404).json({ message: "No schools found" });
    } else {
      res.status(200).json(results);
    }
  } catch(error) {
    next(error)
  }
 };
 ...

}

下面是我根据@sven的答案最终使用的pool函数
数据库.js

const pool = mysql.createPool(config.MYSQL);
pool.getConnection()
  .then(function(connection) {
    console.log(`Connected to database: ${config.MYSQL.database}`);
    pool.releaseConnection(connection)
  })
  .catch(function(error) {
    console.error(error.message);
  });

module.exports = pool;
svmlkihl

svmlkihl1#

不能像那样导出异步获取的值。就像节点中的其他地方一样,您必须使用回调、承诺或异步函数。但是,因为这是针对mysql连接的,所以应该使用连接池。
在你的 database.js -文件:

const mysql = require("promise-mysql");
const config = require("../config");

module.exports = mysql.createPool(config.MYSQL);

您不需要在代码的其余部分进行任何代码更改。
或者,您可以使用 mysql2 而不是 promise-mysql (基于 mysql )因为它提供了许多受欢迎的特性,列在自述文件中。
你的代码只需要很小的改动 npm i -S mysql2 或者 yarn add mysql2 ,然后更改行 require("promise-mysql")require("mysql2/promise") 在你的 database.js -文件。可能正在更新 config.js 以匹配可用于连接池的其他选项。否则 mysql2 api与 mysql .

相关问题