Typescript TypeORM 创建和保存数据的最佳方式
Posted
技术标签:
【中文标题】Typescript TypeORM 创建和保存数据的最佳方式【英文标题】:Typescript TypeORM best way to create and save data 【发布时间】:2021-11-16 15:06:21 【问题描述】:我目前正在开发一个 NestJS 项目,我必须将大量数据存储在单个数据库表中。所以我创建了一个实体、一个存储库、一个 dto 和路由来存储所有内容。我的 dto 就像我的实体一样,非常长,并且包含很多我必须存储的变量。几乎我的 dto 中的每个变量都是可选的,并且在实体中所有内容都是可以为空的,因此我必须在为其创建数据集之前验证该值是否存在。
我的实体:
import Column, Entity, PrimaryGeneratedColumn from 'typeorm';
import distributionSponsors from '../enums/distributionSponsors';
import fbw from '../enums/fbw';
import MovieFskHf from '../enums/movieFskHf';
import MovieFskTr from '../enums/movieFskTr';
import MovieGenre from '../enums/movieGenre';
@Entity()
export class Movie
@PrimaryGeneratedColumn()
id: number;
@Column( nullable: true )
isPublished: boolean;
@Column( nullable: true )
cinemaRelease: Date;
...// more following the same format
import ParseIntPipe from '@nestjs/common';
import ApiProperty from '@nestjs/swagger';
import Type from 'class-transformer';
import IsOptional, IsString from 'class-validator';
import distributionSponsors from '../enums/distributionSponsors';
import fbw from '../enums/fbw';
import MovieFskHf from '../enums/movieFskHf';
import MovieFskTr from '../enums/movieFskTr';
import MovieGenre from '../enums/movieGenre';
export class CreateMovieDto
@ApiProperty()
@IsOptional()
isPublished: boolean;
@ApiProperty()
@IsOptional()
cinemaRelease: Date;
... // more following the same format
现在在我的存储库中,我正在解构 dto。我不想将来自我的 dto 的每个变量都包装到一个 if 语句中。有没有更简单的方法来编写更紧凑的所有内容?
@EntityRepository(Movie)
export class MoviesRepository extends Repository<Movie>
async createMovie(
createMovieDto: CreateMovieDto,
)
const movie = this.create();
const
isPublished,
cinemaRelease,
title,
orgTitle,
...//more following
= createMovieDto;
/* need logic here to do something like
* if(title)
* movie.title = title
*
* just for every single variable from the dto
*/
try
await this.save(movie);
catch (error)
//blah
【问题讨论】:
【参考方案1】:您可以检查 DTO 对象并删除空属性:解决方案如下:
async createMovie(
createMovieDto: CreateMovieDto,
)
Object.keys(createMovieDto).forEach(
k =>
createMovieDto[k] == null ||
(createMovieDto[k] == '' && delete createMovieDto[k]),
);
try
await this.save(createMovieDto);
catch (error)
//blah
【讨论】:
以上是关于Typescript TypeORM 创建和保存数据的最佳方式的主要内容,如果未能解决你的问题,请参考以下文章
如何删除多行 typeorm - postgresql 和 node.js(typescript)
Typescript & TypeORM:不能在模块外使用 import 语句
在 heroku 上部署 typeorm/typescript 应用程序
typescript 示例dinamic查询类似looporm与typeorm