有没有办法在没有 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,只使用普通的expressJS
和mysql
而不使用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 方法?的主要内容,如果未能解决你的问题,请参考以下文章