2

我一直在尝试创建一个nestJS仅使用普通expressJS而不mysql 使用typeorm. 但是,在文档或其他来源中几乎没有这方面的信息。

到目前为止我做了什么:

  1. 创建了一个全局变量来保存从 接收的连接mysql.createConnection()
  2. 尝试使用此连接从 db 获取值:
async findAll() {
    return await connection.query('SELECT * from test', (error, results, fields) => {
        console.log(results);
        return results;
    });
}

控制台正在打印这些数据:

[ RowDataPacket {
    id: 1,
    firstName: 'test',
    middleName: '1',
    lastName: 'user' },
  RowDataPacket {
    id: 2,
    firstName: 'test',
    middleName: '2',
    lastName: 'user' }
]

但是它也抛出了这个错误:

TypeError: Converting circular structure to JSON 
at JSON.stringify (<anonymous>)

编辑:

我从@Kim Kern建议的链接尝试了这个解决方案:

return await connection.query('SELECT * from users', (error, results, fields) => {
    results = results.map((result) => {
        return Object.assign({}, result);
    });
    console.log(results);
    return results;
});

现在结果没有了RowDataPacket,但仍然抛出同样的错误。

4

2 回答 2

1

最后 !!经过几个小时的挖掘,我得到了它。问题在于回调,它没有返回所需的 Promise。它返回一个不可解析的 JSON。

基本上,你要做的是。

async getAll(){
 const res = await this.execExec(connection)
 return res;
}

execExec(connection){
 return new Promise((res, rej) => {
    connection.query('SELECT * from users', function (error,results,fields) {
      if (error) throw error;
      results = results.map((result) => {
         return Object.assign({}, result);
    });
      console.log(results);
      res(results);
    });
  });
}
于 2020-09-10T03:37:31.343 回答
0
const mysql = require('mysql2');
export class TestService {
async selectAll(): Promise<any> {
        let connection = mysql.createPool({
            host: 'localhost',
            user: 'root',
            password: 'root',
            database: 'testDB'
        });
        return new Promise((res, rej) => {
            connection.execute("select * from test", (e, results) => {
                if (e) throw e;
                //  console.log(results);
                res(results);
            });
        })
    }
}
于 2021-04-19T06:49:15.460 回答