写点什么

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

评论

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

极简,利用Docker仅两行命令就能下载和编译OpenJDK11

程序员欣宸

Java Openjdk 7月月更

RPA进阶(二)Uipath应用实践

No Silver Bullet

RPA 7月月更 Uipath

亚马逊云科技 Community Builder 申请窗口开启

亚马逊云科技 (Amazon Web Services)

build 亚马逊云

微信小程序利用百度api达成植物识别

是乃德也是Ned

小程序开发 7月月更

【LeetCode】统计值等于子树平均值的节点数Java题解

Albert

LeetCode 7月月更

远程办公对我们的各方面影响心得 | 社区征文

恒山其若陋兮

远程办公 初夏征文

深刻理解 Linux 进程间七大通信(IPC)

C++后台开发

网络编程 linux开发 Linux服务器开发 C++开发 进程通信

JavaScript 设计模式之代理模式

devpoint

JavaScript 设计模式 代理模式 7月月更

JDBC

武师叔

7月月更

微服务服务稳定性治理

阿泽🧸

微服务治理 7月月更

一个实习生的CnosDB之旅

CnosDB

IoT 时序数据库 开源社区 CnosDB infra

网络编程常用的几种字符编码

HoneyMoose

TCP拥塞控制详解 | 2. 背景

俞凡

算法 网络 TCP拥塞控制

相信自己,这次一把搞定JVM面试

慕枫技术笔记

JVM 7月月更

Django 表单

海拥(haiyong.site)

django 7月月更

rxjs Observable 自定义 Operator 的开发技巧

汪子熙

typescript 响应式编程 angular RXJS 7月月更

JavaScript 设计模式之策略模式

devpoint

JavaScript 设计模式 策略模式 7月月更

认识线程

zarmnosaj

7月月更

Windows11 ARM版本安装Python环境

IT蜗壳-Tango

IT蜗壳教学 7月月更

创业团队如何落地敏捷测试,提升质量效能?丨声网开发者创业讲堂 Vol.03

RTE开发者社区

创业讲堂 生态专栏

关于我

程序员半支烟

BOOTSTRAP

Jason199

bootstrap 7月月更

OpenHarmony如何启动远程设备的FA

坚果

HarmonyOS OpenHarmony 7月月更 harmony

体验居家办公完成项目有感 | 社区征文

恒山其若陋兮

居家办公 初夏征文

纪念成为首个DAYU200三方demo贡献者

坚果

HarmonyOS OpenHarmony OpenHarmony应用开发 7月月更 harmony

K临近算法介绍

乌龟哥哥

7月月更

hive数据导入:从查询数据导入

怀瑾握瑜的嘉与嘉

大数据 hive 7月月更

Security RememberMe原理分析

急需上岸的小谢

7月月更

使用BLoC 构建 Flutter的页面实例

岛上码农

flutter ios 安卓 移动端开发 7月月更

关于Flink框架窗口(window)函数最全解析

百思不得小赵

大数据 flink window 7月月更

记一次面试

SkyFire

面试 操作系统 底层 基础知识

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