Node.js和后续数据访问对象和业务对象



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

我有映射到类别表的Category

import { Model, Table, Column } from "sequelize-typescript";
@Table
export class Category extends Model<Category>{
@Column
name: string
}

我也有CategoryControllerCategoryService

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

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

使用Category实例的toJSON()来获取实例的"JSON 表示形式"。

有关详细信息,请参阅续集文档: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();
});

最新更新