javascript 错误:属性'getConnection'在类型'Bluebird '上不存在< Pool>

2ul0zpep  于 2023-05-27  发布在  Java
关注(0)|答案(8)|浏览(132)

我需要帮助,试图通过.createPool连接到MySQL数据库,结果出现了以下错误:

属性“getConnection”在类型“Bluebird”上不存在。你忘了用“等待”了吗?

几个月前我试过了,一切都很完美:/。我认为在promise-mysql的版本3中有一些变化。我正在使用typescript,并尝试执行一个REST API
使用“promise-mysql”:“^4.0.4”,ES6,

`import mysql from 'promise-mysql';

import keys from './keys';

const pool = mysql.createPool(keys.database);

pool.getConnection()
    .then((connection: any) => {
        pool.releaseConnection(connection);
        console.log('DB is connected');
    });
export default pool;`
vom3gejh

vom3gejh1#

`enter code here`**Importa desde 'mysql' proque soporta las librerias de getConnection()**

import mysql from 'mysql';`enter code here`
import keys from './keys';

const pool = mysql.createPool(keys.database);

pool.getConnection((err, connection) => {
     if (err) throw err; connection.release(); 
     console.log('DB is connected'); 

});

**Tu contolador quedaria asi:**

import{Request, Response} from 'express';
import pool from '../database';

class GamesController{
    public index(req: Request, res: Response){
        pool.query('DESCRIBE games');
        res.json('games');
    }
}
const gamesController = new GamesController();
export default gamesController;
r7xajy2e

r7xajy2e2#

我的解决方案

import mysql from 'promise-mysql';

import keys from './keys';

const pool = mysql.createPool(keys.database);

pool.then((r: any) => r.getConnection().then((connection:any)=>{
    r.releaseConnection(connection);
    console.log('Conexion exitosa.')
}));

export default pool;
2o7dmzc5

2o7dmzc53#

安装Promise-MySql的最新版本:

npm i promise-mysql@3.3.1
cbjzeqam

cbjzeqam4#

尝试等待池完成创建:

pool.then((r: any) => r.getConnection().then((connection: any) => {
  pool.releaseConnection(connection);
  console.log("DB is connected");
});
goqiplq2

goqiplq25#

解决方案:

import mysql from 'mysql';

import keys from './keys';

const pool = mysql.createPool(keys.database);

pool.getConnection((err, connection) => {
    if (err) throw err;
    connection.release();
    console.log('DB is connected');
})
export default pool;
scyqe7ek

scyqe7ek6#

您可以尝试使用此版本npm install promise-mysql@3.3.1

1sbrub3j

1sbrub3j7#

你必须将promise-mysql的版本更改为3.3.1。

sz81bmfz

sz81bmfz8#

不要降级您的库版本!

您也不需要安装其他库。它刚刚改变了,所以你需要做一些改变:

import mysql, { Pool, PoolConnection } from "promise-mysql";
import keys from "./keys";

const pool = (query: string): Promise<any> => {
  return new Promise<any>((resolve, reject) => {
    let connection: PoolConnection;
    mysql
      .createPool(keys.database)
      .then((mysqlPool: Pool) => mysqlPool.getConnection())
      .then((conn: PoolConnection) => {
        connection = conn;
        console.log("Connection opened", query);
        return connection.query(query);
      })
      .then((result: any) => {
        console.log("Query executed successfully");
        connection.release();
        console.log("Connection closed");
        resolve(result);
      })
      .catch((error: Error) => {
        console.error("An error occurred:", error);
        if (connection) {
          connection.release();
        }
        reject(error);
      });
  });
};

export default pool;

你可以像这样从你的控制器中使用它:

import { Request, Response } from "express";
import pool from "../database";

class GamesController {
  index(req: Request, res: Response) {
    const query = "SELECT * FROM games";
    pool(query)
      .then((result) => {
        res.json(result);
      })
      .catch((error) => {
        console.log(error);
      });
  }
}

export const gamesController = new GamesController();

相关问题