AICon议程上新60%,阿里国际、360智脑、科大讯飞、蔚来汽车分享大模型探索与实践 了解详情
写点什么

全栈 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:0012659

评论

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

嵌入式 Linux 入门(三、Linux Shell 及常用命令说明)

矜辰所致

Linux Shell 10月月更 Shell命令

【一Go到底】第二十三天---字符串函数详解

指剑

Go golang 10月月更

1:安装、连接以及配置-MySQL

Yeats_Liao

数据库 后端 10月月更

3:表的基本操作-MySQL

Yeats_Liao

数据库 后端 10月月更

“程”风破浪的开发者|Web3用合约让利润分配更公平

石云升

区块链 Web3.0 10月月更 “程”风破浪的开发者

类型转化问题

魏铁锤

10月月更

【资损】资损防控的系统规范-内部接口类设计

小明Java问道之路

架构 微服务 安全 10月月更 资损

举三反一,一通百通的“数学脑”是怎样炼成的?

图灵教育

数学 科普

决胜 AI 金融新赛道!Python Quants 创始人分享宝贵 AI 算法交易经验

图灵社区

人工智能

“程”风破浪的开发者|HTML知识框架整理

默默的成长

Web3.0 “程”风破浪的开发者

二叉树的详细实现(含递归展开图)

lovevivi

c 数据结构 10月月更

分享5个可能用得上的JavaScript 库

devpoint

JavaScript i18n

【web 开发基础】PHP 快速入门(8)-PHP 运算符之逻辑运算符详解

迷彩

逻辑运算符 10月月更 web开发基础 PHP基础

C4D2023取消永久许可?Maya推出精简版?你不能错过的7个CG软件资讯...

Renderbus瑞云渲染农场

CG Renderbus瑞云渲染 渲染软件更新

Spring Boot「12」自定义 starter

Samson

Java spring 学习笔记 spring-boot 10月月更

极客时间 - 运维进阶训练营 - 第一周作业

dog_brother

Docker 镜像 linux namespace

2:数据库的基本操作-MySQL

Yeats_Liao

数据库 后端 10月月更

决胜AI金融新赛道!Python Quants 创始人分享宝贵 AI 算法交易经验

图灵教育

人工智能

eBPF深度探索: 高效DNS监控实现

俞凡

ebpf

运维进阶训练营-W01H

赤色闪电

运维

栈和队列的实现

lovevivi

c 数据结构 10月月更

曾国藩正面与侧面2

dfuru

2022-10-23:给你一个整数数组 nums 。如果 nums 的一个子集中, 所有元素的乘积可以表示为一个或多个 互不相同的质数 的乘积,那么我们称它为 好子集 。 比方说,如果 nums =

福大大架构师每日一题

算法 rust 福大大

1024@程序员:图灵社区福利来了,请本人签收

图灵教育

程序员节

举三反一,一通百通的“数学脑”是怎样炼成的?

图灵社区

数学

【愚公系列】2022年10月 Go教学课程 037-面向对象综合案例-微博

愚公搬代码

10月月更

“程”风破浪的开发者|我的数据结构和算法学习小技巧

Albert

学习方法 算法 LeetCode “程”风破浪的开发者

golang中的nil接收器

六月的

golang nil

Java之面向对象

魏铁锤

10月月更

Excel 文档的写入

梦笔生花

Python Monad Excel数据分析 10月月更

1024@程序员:图灵社区福利来了,请本人签收

图灵社区

程序员节

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