前端和node端如何共用同一个entity

50 阅读2分钟

前端页面运行在浏览器中,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的一个自我学习项目

如果有大佬有更好的方法请务必评论区指教一番