node.js - 真正严格类型化的 API 工作流 - 如何编写健壮的 API?
问题描述
我尝试了很多不同的工具和框架,我想使用一些东西。真正严格地使用 Nodejs 和 Typescript 键入,但似乎什么都不是?
例如,路由系统:
我尝试过 Meteor 和 NestJS 之类的框架,这些框架真的很难扩展,如果缺少某个功能,你将永远无法在保持所有类型的同时在其之上开发一些东西。
我已经掌握了 Nuxt、Next 和 Sapper 等框架。但是没有任何东西是真正输入的,或者以一种奇怪的方式。
所以我选择了 Express JS,我可以输入自己的路线并编写自己的方法和类来扩展它。这比我以前尝试过的任何其他方法都容易。
但路由系统只是工作 API 的一部分。现在我需要将我的路线与我的数据库链接起来,当然,我需要随身携带一个 ORM。但是事件 TypeORM 或 Sequelize-Typescript 并不是真正类型化的。sequelize-typescript 中的“”等某些方法User.create({//Not typed})
不提供自定义类型来帮助我填写此方法。
而在ORM之后,将轮到身份验证、数据输入,甚至是客户端。
Typescript 很棒,但是所有“使用 typescript”的东西仍然会有一些动态数据层,需要在编写代码时手动检查。
你怎么处理这个?当您制作应用程序时,您是否总是在辅助屏幕中检查您的类型和接口?当您需要在界面中添加新字段时,您如何跟踪使用它的应用程序的每个部分(路由、客户端、数据库、验证)?
我只是不想开始编写我的 API 却发现很难修改、改进或调试(我可能会有超过 25 个实体,它们之间有超过 100 个关系)。
解决方案
您可以通过定义模型并将其包含在架构定义中来使您的 TypeORM 实体类型安全(来自:https ://typeorm.io/#/separating-entity-definition )
import {EntitySchema} from "typeorm";
export interface Category {
id: number;
name: string;
}
export const CategoryEntity = new EntitySchema<Category>({
name: "category",
columns: {
id: {
type: Number,
primary: true,
generated: true
},
name: {
type: String
}
}
});
推荐阅读
- python - matplotlib.show() 似乎什么也没做
- node.js - 如何在猫鼬中填充对象数组中的每个元素?
- azure-devops - Azure Pipeline Cron Scheduler:不要同时轮询所有分支
- r - 在 r 中使用 dplyr 有效地重塑数据帧
- matomo - Matomo 中的目标创建问题
- git - 使用带有裸存储库的子模块失败
- jenkins - 应用和保存按钮在 Jenkins 上不起作用
- php - 如何在 prestashop 中发送电子邮件?
- ngrx - 如何使用实体适配器和并行返回状态对象
- ios - 按下按钮swiftUI时计时器不显示正确的时间