Nodejs nest.js 中如何保存 bigint 类型?
Nodejs nest.js 中如何保存 bigint 类型?
保存时提示 TypeError: Do not know how to serialize a BigInt at JSON.stringify (<anonymous>)
应该是 typeorm 中 selectQuerybuild.js 文件中的 JSON.stringify(parameters) 引起的。
如何解决?
2 回复
报错是标准要求
https://tc39.es/proposal-bigint/#sec-serializejsonproperty
fromString 还没整好,建议自己搞到 string 再存
如果一定要用,可以尝试修改 toJSON,按道理是可以的
在 Node.js 使用 NestJS 框架时,保存 bigint
类型的数据到数据库(如 PostgreSQL 或 MySQL)通常涉及几个步骤,包括定义实体、设置列类型以及处理类型转换。以下是一个示例,展示了如何在 NestJS 中处理 bigint
类型。
1. 定义实体
假设你使用的是 TypeORM,可以在实体中定义 bigint
类型的列:
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column('bigint')
bigIntValue: bigint;
}
2. 在服务中保存数据
在服务中,你可以直接将 bigint
类型的值赋给实体属性并保存:
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { User } from './user.entity';
@Injectable()
export class UserService {
constructor(
@InjectRepository(User)
private usersRepository: Repository<User>,
) {}
async createUser(bigIntValue: bigint): Promise<User> {
const user = new User();
user.bigIntValue = bigIntValue;
return this.usersRepository.save(user);
}
}
3. 注意事项
- 确保数据库中的相应列类型也设置为
bigint
。 - 在处理
bigint
类型时,注意 JavaScript 中Number
类型的精度限制,对于非常大的数值,最好使用字符串或原生bigint
类型进行传输和处理。
通过上述步骤,你应该能够在 NestJS 中成功保存 bigint
类型的数据。