QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

全栈 TypeScript CRUD 框架 Remult

  • 2023-06-05
    北京
  • 本文字数:1306 字

    阅读完需:约 4 分钟

全栈TypeScript CRUD框架 Remult

Remult 是一个全栈 CRUD 库,它利用 TypeScript 模型来简化开发,并提供了类型安全的 API 客户端和查询构建器。

 

在软件开发中,为了确保系统功能正常,必须管理和同步两个数据模型:服务器模型和客户端模型。服务器模型指定数据库结构和 API,而客户端模型定义 API 的传入传出数据。

 

然而,维护单独的模型集和验证器可能会导致冗余,增加维护开销,以及模型不同步时出错的可能性。

 

Remult 通过提供一个集成模型来解决这个问题。该模型定义了数据库模式,暴露了简单的 CRUD API,并支持客户端集成,使开发人员能够轻松地查询数据库,并且可以确保类型安全。

 

定义实体


Remult 使用装饰器将基本的 JavaScript 类转换为 Remult 实体。开发人员可以向类中添加 Entity 装饰器,并对每个属性应用相关的字段装饰器,从而轻松地完成这项工作。

 

使用装饰器,Remult 简化了创建实体及相关字段的过程,提高了开发人员的高效。

import { Entity, Fields } from "remult"

@Entity("contacts", { allowApiCrud: true})

export class Contact { @Fields.autoIncrement() id = 0 @Fields.string() name = "" @Fields.string() number = ""}
复制代码

 

服务器端设置


要开始使用 Remult,请将其与所选服务器上必要的实体一起注册。

 

幸运的是,Remult 针对几个流行的服务器框架提供了开箱即用的集成,包括 Express、Fastify、Next.js、Nest 和 Koa。

import express from "express";import { remultExpress } from "remult/remult-express";import Contact from "../shared/Contact.ts";

const app = express();

app.use( remultExpress({ entities: [ Contact ] }));
复制代码

 

客户端集成

配置完后端和实体后,下一步是将 Remult 与应用程序的前端集成。

 

幸运的是,Remult 的客户端集成被设计成库无关的。也就是说,它可以使用浏览器 fetch 功能或 Axios 进行操作。

 

为了说明这一点,请看下面的例子:


import { useEffect, useState } from "react"

import { remult } from "remult"import { Contact } from "./shared/Contact"const contactsRepo = remult.repo(Contact)

export default function App() { const [contacts, setContacts] = useState<Contact[]>([])

useEffect(() => { contactsRepo.find().then(setContact) }, [])

return ( <div> <h1>Contacts</h1> <ul> {contacts.map(contact => { return ( <div key={contact.id}> {contact.name} | {contact.phone} </div> ) })} </ul> </div> )}
复制代码

 

从这个例子可以看出,将 Remult 集成到应用程序前端非常简单、灵活。然后,开发人员就可以在整个栈中无缝地利用 Remult 的强大功能了。

 

Remult 是遵循MIT许可的开源软件。欢迎通过 Remult GitHub存储库做贡献。

 

原文链接:

https://www.infoq.com/news/2023/05/remult-crud-typescript/


相关阅读:

“TypeScript不值得!”前端框架Svelte作者宣布重构代码,反向迁移到JavaScript引争议

三年回顾:JavaScript与TypeScript最新特性汇总

TypeScript 5.0 现已发布:全新的装饰器,速度、内存和包大小优化

2023-06-05 08:0014524

评论

发布
暂无评论
发现更多内容

《2020年微信视频号研究报告》 | 视频号 28 天 (11)

赵新龙

28天写作

【小菜学网络】以太网帧结构

fasionchan

网络编程 计算机网络 网络协议 TCP/IP

KubeEdge应用案例 | 谐云基于云边协同平台,推进中移在线分公司IT技术架构产业升级

华为云原生团队

云计算 开源 云原生 边缘计算 边缘技术

Kafka 原理以及分区分配策略剖析

vivo互联网技术

大数据 kafka 文件存储 消息队列

简化业务代码开发:看Lambda表达式如何将代码封装为数据

华为云开发者联盟

函数式接口 数据 代码 函数 lambad

【小菜学网络】集线器

fasionchan

网络编程 计算机网络 网络协议 TCP/IP

产品经理书单推荐

王一凡

永续合约系统APP开发|永续合约软件开发

系统开发

Elastic search 单节点、两节点、三节点环境

escray

elasticsearch elastic 28天写作 死磕Elasticsearch 60天通过Elastic认证考试

合约跟单交易软件系统开发|合约跟单交易APP开发

系统开发

亿级大表在线不锁表变更字段与索引

华为云开发者联盟

数据库 数据 索引 表格

8周架构

FreeOcean

Redis 学习笔记 06:压缩列表

架构精进之路

redis 七日更 28天写作

作业1

瑾瑾呀

产品经理 VS 项目经理 VS 需求工程师

王一凡

产品经理 项目经理 需求工程师

全网呕血整理:关于YOLO v3原理分析

华为云开发者联盟

算法 计算 yolo

[ARTS-Share]OutOfMemory的Kafka学习笔记(1)

OutOfMemory1024

ARTS 打卡计划

架构师系列 14 PageRank算法

桃花原记

第十三周学习总结

晴空万里

架构师训练营第2期

产品经理训练营-第一周-作业

邹小胖

产品经理训练营

寻找学习资源的三种方式

石云升

学习方法 搜索技巧 28天写作

第八周作业&总结

胡益

地下钱庄简单介绍

IT方案内参

大数据 地下钱庄 技战法

iTerm2 实现 ssh 自动登录,并使用 Zmodem 实现快速传输文件

米开朗基杨

iterm2

SpringCloud 从入门到精通 11---Nacos负载均衡

Felix

[ARTS-Review]Maximizing Developer Effectiveness Review

OutOfMemory1024

ARTS 打卡计划

SpringCloud 从入门到精通10---Nacos安装和使用

Felix

Spring Boot 集成MyBatis

武哥聊编程

Java mybatis springboot SpringBoot 2 28天写作

音视频又贵又卡还不够炫?云原生的华为云视频云服务带你重塑新体验

华为云开发者联盟

云原生 音视频 云服务 华为云

也说一下996

张老蔫

28天写作

IM即时通讯实现的原理

v16629866266

全栈TypeScript CRUD框架 Remult_大前端_Guy Nesher_InfoQ精选文章