2017-08-01 2 views
0

オブジェクト私はNode.jsのサービスNode.jsのとsequelize-typescriptです - データアクセスオブジェクトやビジネスが

sequelize-typescriptを使用していますが、私は、カテゴリテーブルにマップCategoryクラス

import { Model, Table, Column } from "sequelize-typescript"; 

@Table 
export class Category extends Model<Category>{ 

    @Column 
    name: string 
} 

を持っているIまたCategoryController

export class CategoryController { 

    ... 

    async getAll(request: Request, response: Response) { 
     let categories = await this.categoryService.getCatergories(); 
     response.json(categories) 
    } 
} 

export class CategoryService { 

    async getCatergories(): Promise<Category[]> { 
     let categories = await Category.findAll<Category>() 
     return categories 
    } 

} 

CategoryServiceを持っており、それがあるべきようにすべてがあります。

しかし、それはのようにモデルクラスから使用継承されたメソッドを使用することができ、コントローラにCategoryを返す:

export class CategoryModel { 
    id : number 
    name : string 
} 

export class CategoryController { 

    ... 

    async getAll(request: Request, response: Response) { 
     let categories = await this.categoryService.getCatergories(); 

     // Remove associated row in the database 
     categories[0].destroy() 

     response.json(categories) 
    } 
} 

私が考えていたが、このようなCategoryModelクラスを作成します

CategoryServiceのすべてのメソッドをCategoryの代わりにCategoryModelのインスタンスに戻し、という名前に変更してください210〜CategoryEntity

このような問題に対処する最善の方法は何ですか?

答えて

1

CategoryインスタンスのtoJSON()を使用して、インスタンスの「JSON表現」を取得します。

詳しくは、sequelizeドキュメント:

interface ICategory { 
    id: number; 
    name: string; 
} 

@Table 
export class Category extends Model<Category> implements ICategory{ 

    @Column 
    name: string 
} 

toJSON()を使用して:あなたは別のクラスを定義するのでtoJSON()の戻り値の型の安全性を達成するためのインタフェースを代わりに追加することができhttp://docs.sequelizejs.com/class/lib/model.js~Model.html#instance-method-toJSONさらに

Category.findOne(result => { 
    const category: ICategory = result.toJSON(); 
}); 
関連する問題