Nodejs nest.js 中如何保存 bigint 类型?

发布于 1周前 作者 sinazl 来自 nodejs/Nestjs

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 类型的数据。

回到顶部