有没有办法在没有 typeorm 的情况下创建 NestJS API,但使用普通的 expressJS/mysql 方法?

Posted

技术标签:

【中文标题】有没有办法在没有 typeorm 的情况下创建 NestJS API,但使用普通的 expressJS/mysql 方法?【英文标题】:Is there a way to create NestJS API without typeorm but plain expressJS/mysql methods? 【发布时间】:2019-08-01 22:54:36 【问题描述】:

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

到目前为止我做了什么:

    创建了一个全局变量来保持从mysql.createConnection() 收到的连接。 尝试使用此连接从 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,但还是抛出同样的错误。

【问题讨论】:

问题似乎是RowDataPacket。看看这个线程,它提出了一个 hacky 解决方案:***.com/a/34460319/4694994 另外,请查看使用 typeorm 而没有 @nestjs/typeorm 包的文档。我认为您可以重用很多结构,只需将 typeorm 与 mysql 交换:docs.nestjs.com/recipes/sql-typeorm 【参考方案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);
    );
  );

【讨论】:

【参考方案2】:
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);
            );
        )
    

【讨论】:

虽然这个代码块可能会回答这个问题,但最好能稍微解释一下为什么会这样。

以上是关于有没有办法在没有 typeorm 的情况下创建 NestJS API,但使用普通的 expressJS/mysql 方法?的主要内容,如果未能解决你的问题,请参考以下文章

TypeORM jsonb 数组列

TypeORM - 运行服务器时自动填充表

有没有办法在没有 Fastlane 的相应应用程序的情况下创建捆绑标识符?

有没有办法在不必创建变量的情况下捕获异常?

nestjs / TypeOrm 数据库事务

有没有办法在不导入 csv 的情况下从 .csv 创建 JSON?