前端页面运行在浏览器中,node端运行在服务器node环境中,但是开发时我们写代码是写在编辑器中,如果开发时两个项目都在自己的手中的话自然是写一份最好
那么如何能够定义一个entity能够使得这个entity文件可以被前端浏览器使用也可以被后端node使用呢?
如果可以只写一份,那必定可以大大减少出错的概率,提升开发的效率,即便往小的说,也可以偷偷懒
我们先看后端的一个实体定义,毕竟数据为先,存储于数据库都要先依赖于后端
import { CreateDateColumn, DeleteDateColumn, PrimaryGeneratedColumn, UpdateDateColumn } from 'typeorm';
export abstract class DataBaseEntity {
@PrimaryGeneratedColumn()
id?: number;
@CreateDateColumn()
createDate?: Date;
@UpdateDateColumn()
updateDate?: Date;
@DeleteDateColumn()
deletedDate?: Date;
isSelected?: boolean;
}
import { Column, Entity, OneToMany } from 'typeorm';
import { DataBaseEntity } from './BaseEntity/DataBaseEntity';
import { DatabaseEnum } from '@/enums/DatabaseEnum';
import { TelegramFileToTag } from '@/entitys/TelegramFileToTag';
import { FileEntityWith } from '@/entitys/FileEntityWith';
@Entity({ name: 'tag', database: DatabaseEnum.total })
export class Tag extends DataBaseEntity {
@Column({ unique: true })
tagName?: string;
@OneToMany(() => TelegramFileToTag, telegramFileToTag => telegramFileToTag.tag)
telegramFileToTags?: TelegramFileToTag[];
@OneToMany(() => FileEntityWith, fileEntityWiths => fileEntityWiths.tag)
fileEntityWiths?: FileEntityWith[];
}
这是我个人学习项目中的tag实体定义,代表一个标签,使用的是typeorm,如果前端浏览器想要使用这个entity,typeorm的注解装饰器将是一大问题
这里我使用了webpack中的resolve配置将typeorm 的路径指引指向了
typeorm: path.resolve(__dirname, 'typeorm'),
在相应的路径里手动写了同名的装饰器
export function Entity() { return () => {}; }
export function PrimaryGeneratedColumn() { return () => {}; }
export function CreateDateColumn() { return () => {}; }
export function UpdateDateColumn() { return () => {}; }
export function DeleteDateColumn() { return () => {}; }
export function Column() { return () => {}; }
export function JoinColumn() { return () => {}; }
export function OneToOne() { return () => {}; }
export function OneToMany() { return () => {}; }
export function ManyToOne() { return () => {}; }
export function Index() { return () => {}; }
export function BeforeInsert() { return () => {}; }
只是这种方法自我感觉很粗糙,也不清楚会不会有公司有项目有这个需求,这只是我自学nestjs的一个自我学习项目
如果有大佬有更好的方法请务必评论区指教一番