Node.js 和 sequelize-typescript - 数据访问对象和业务对象
Posted
技术标签:
【中文标题】Node.js 和 sequelize-typescript - 数据访问对象和业务对象【英文标题】:Node.js and sequelize-typescript - data access objects and business objects 【发布时间】: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
处理此类问题的最佳方法是什么?
【问题讨论】:
【参考方案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();
);
【讨论】:
以上是关于Node.js 和 sequelize-typescript - 数据访问对象和业务对象的主要内容,如果未能解决你的问题,请参考以下文章