【问题标题】:Node.js and sequelize-typescript - data access objects and business objectsNode.js 和 sequelize-typescript - 数据访问对象和业务对象
【发布时间】:2018-01-08 04:01:26
【问题描述】:

我在我的 Node.js 服务中使用 sequelize-typescript

我有一个映射到类别表的Category 类

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

@Table
export class Category extends Model<Category>{

    @Column
    name: string
}

我也有CategoryController和CategoryService

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
    }

}

一切都应该如此。

但是将Category 返回给控制器允许它使用模型类中的继承方法,例如:

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 类:

export class CategoryModel {
    id : number 
    name : string
}

并修改CategoryService中的所有方法以返回CategoryModel实例而不是Category并将Category重命名为CategoryEntity

处理此类问题的最佳方法是什么?

【问题讨论】:

    标签: node.js typescript orm sequelize.js sequelize-typescript


    【解决方案1】:

    使用Category 实例的toJSON() 获取实例的“JSON 表示”。

    有关详细信息,请参阅 sequelize 文档:http://docs.sequelizejs.com/class/lib/model.js~Model.html#instance-method-toJSON

    此外,您可以添加一个接口来实现toJSON() 的返回值的类型安全,而不是定义另一个类:

    interface ICategory {
      id: number;
      name: string;
    }
    
    @Table
    export class Category extends Model<Category> implements ICategory{
    
        @Column
        name: string
    }
    

    使用toJSON():

    Category.findOne(result => {
      const category: ICategory = result.toJSON();
    });
    

    【讨论】:

      猜你喜欢
      • 2010-11-18
      • 2011-04-12
      • 2013-11-11
      • 2010-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-09
      相关资源
      最近更新 更多