速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

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

评论

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

小程序开发这么简单,还需要App吗?

FinFish

小程序生态 APP开发 小程序开发

Boundless Hackathon @Stanford 主题黑客松活动闭幕,一文回顾

股市老人

《面试1v1》开篇

JavaPub

Java redis elasticsearch 面试 计算机

DevOps流水线设计的最佳实践

DevOps在路上

DevOps jenkins Tekton gitlab ci 持续交付流水线

Linux安装jdk的详细步骤。

百度搜索:蓝易云

Java 云计算 Linux 运维 云服务器

Boundless Hackathon @Stanford 主题黑客松活动闭幕,一文回顾

威廉META

Cnetos7系统如何实时屏蔽国外全部访问?

百度搜索:蓝易云

云计算 Linux centos 服务器 蓝易云

服务器安全设置Centos7 防火墙firewall与iptables

百度搜索:蓝易云

Linux centos 运维 防火墙 iptables

Spring 中的父子容器是咋回事?

江南一点雨

Java spring

2023-07-11:给定正整数 n, 返回在 [1, n] 范围内具有 至少 1 位 重复数字的正整数的个数。 输入:n = 100。 输出:10。

福大大架构师每日一题

Go 算法 rust 福大大架构师每日一题

C++之openFrameworks框架

梦笔生花

团队如何选择合适的Git分支策略?

DevOps在路上

git DevOps 分支管理 DevOps工具

腾讯云AI绘画好不好用,与同类产品对比有何优势?来看看ChatGPT是如何回答的

牵着蜗牛去散步

腾讯云 腾讯 腾讯云AI绘画

实操:用Flutter构建一个简单的微信天气预报小程序

没有用户名丶

HDC.Cloud 2023 |华为云5大开源项目发布与更新,助力开发者实现应用创新

华为云开源

开源 云原生 HDC.Cloud

MyBatis实现动态SQL更新

越长大越悲伤

Java mybatis mybatis的拦截器 Mybatis Plus

悦数图数据库:图技术加速行业大模型智能化应用落地|WAIC 2023 精彩回顾

悦数图数据库

人工智能 图数据库 国产数据库 大模型 AIGC

es笔记六之聚合操作之指标聚合

Hunter熊

elasticsearch

Centos7系统如何安装MySQL5.7数据库?

百度搜索:蓝易云

云计算 Linux 运维 云服务器 MySQL 5.7

悦数图数据库:图技术加速行业大模型智能化应用落地|WAIC 2023 精彩回顾

最新动态

PyTorch模型容器与AlexNet构建

timerring

PyTorch

你以为搞个jenkins流水线每天跑,团队就在使用CI/CD实践了?

DevOps在路上

DevOps 持续集成 jenkins

TinyNG——开源Angular组件库,助力Web应用快速开发!

OpenTiny社区

CSS typescript angluar 前端ui组件库

Docker学习路线2:底层技术

小万哥

Docker 程序员 容器 后端 开发

nginx启动命令和停止命令。

百度搜索:蓝易云

nginx 云计算 Linux 运维 云服务器

HarmonyOS课程尝鲜计划,优享特权大礼包

HarmonyOS开发者

HarmonyOS

《面试1v1》HashMap

JavaPub

Java jdk JVM hashmap

Boundless Hackathon @Stanford 主题黑客松活动闭幕,一文回顾

鳄鱼视界

软件高效自动化部署:华为云部署服务CodeArts Deploy

华为云PaaS服务小智

云计算 开发者 软件开发 华为云 华为开发者大会

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