ค้นหาเว็บไซต์

node.js - วิธีการเริ่มต้นเอนทิตีโดยการส่งออบเจ็กต์เข้าไปโดยใช้ typeorm


ฉันมีเอนทิตี "List" และฉันต้องการสร้างลิสต์ใหม่โดยการส่งออบเจ็กต์เข้าไปในตัวสร้าง

list.ts

import {Entity, PrimaryColumn, Column, CreateDateColumn, UpdateDateColumn, DeleteDateColumn } from "typeorm";

@Entity()
export class List {

    @PrimaryColumn()
    id: string;

    @Column({type: "varchar", nullable: true})
    dtype: string;

    @Column({type: "varchar", nullable: true})
    title: string;

    @Column({type: "varchar"})
    user_id: string;

    @Column({type: "varchar", nullable: true})
    brand_id: string;

    @CreateDateColumn({type: "timestamp", nullable: true})
    created_at: string;

    @UpdateDateColumn({type: "timestamp", nullable: true})
    updated_at: string;

    @DeleteDateColumn({type: "timestamp", nullable: true})
    deleted_at: string;

}

รายการ.ทดสอบ

import "reflect-metadata";
import {createConnection, getRepository} from "typeorm";
import {List} from "./../../src/entity/lists/List";

describe("List", () => {

    let connection
    beforeAll( async () => {
        connection = await createConnection();
        console.log(connection);
    });

    it("should insert a list into database", async () => {

        const listRepository = getRepository(List);

        const list = new List({
            id: "7e60c4ef",
            dtype: "brandlist",
            title: "OnePlus",
            user_id: "3aecd1b0-c34d-4427-9abd-fdacef00eaa5",
            brand_id: "7e60c4ef-0e6f-46c9-948b-a97d555bf4e4",
        });

    })

})

ตอนนี้ฉันได้รับสิ่งต่อไปนี้

คาดว่าจะมี 0 อาร์กิวเมนต์ แต่ได้ 1.ts(2554)

มีวิธีที่ TypeORM สามารถจัดการเรื่องนี้โดยอัตโนมัติได้หรือไม่?

คำตอบ #1

มีสองวิธีในการแก้ปัญหานี้ วิธีแรกคือการประกาศตัวสร้างของคุณเองในคลาส List และกำหนดค่า แต่ก็จะยุ่งเหยิง

วิธีที่แนะนำคือการใช้ repository.create เพื่อสร้างอินสแตนซ์ของเอนทิตีจากออบเจ็กต์ https://github.com/typeorm/typeorm/blob/master/docs/repository-api.md

        const listRepository = connection.getRepository(List);

        const list = listRepository.create({
            id: "7e60c4ef",
            dtype: "brandlist",
            title: "OnePlus",
            user_id: "3aecd1b0-c34d-4427-9abd-fdacef00eaa5",
            brand_id: "7e60c4ef-0e6f-46c9-948b-a97d555bf4e4",
        });

        const newList = await listRepository.save(list);

คำตอบ #2

แก้ไข: ฉันมาถึงกระทู้นี้โดยการพยายามค้นหาวิธีการเริ่มต้นวัตถุ/คลาส TypeORM โดยการส่งค่าคุณสมบัติ/พารามิเตอร์ body/วัตถุ ดังนั้น ถ้าคุณต้องการวัตถุเดียว คุณสามารถใช้ manager ได้

import { getManager } from "typeorm";
// ...
const manager = getManager();
const newUser = manager.create(User, req.body);
const user = await manager.save(newUser);

ตัวอย่างการสร้างอ็อบเจ็กต์ผู้ใช้และบันทึกมันจากร่างกายแบบไดนามิกของคำขอ express ตัวอย่างนี้เป็นเพียงเพื่อแสดง ให้ตรวจสอบความถูกต้องและทำความสะอาดสคีมาของคุณก่อนส่งไปยังฟังก์ชันสร้างเพื่อหลีกเลี่ยงไม่ให้ผู้ใช้ API ผ่านพารามิเตอร์ใดๆ เช่น {admin: true} ;).

import { getManager } from "typeorm";
createConnection()
  .then(async (connection) => {
    const app = express();
    app.use(express.json());

    app.post("/users", async (req: Request, res: Response) => {
      const manager = getManager();
      const newUser = manager.create(User, req.body);
      const user = await manager.save(newUser);
      res.json(user);
    });

    app.listen(4000);
  })
  .catch((error) => console.log(error));

บทความที่เกี่ยวข้อง