首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

RestQL:现代化的 API 开发方式

感兴趣的同学可以前往围观一下。欢迎 Pull Request,同时热烈欢迎 Star。 在现代的业务系统中,后端开发工作基本上可以被拆分为三项: 接口鉴权。...例如判断是不是当前系统的用户,以及该用户是否有权限访问接口。 与其他系统的交互。例如调用第三方的服务,或内部搭建的其他服务。 数据操作。基本上所有需要持久化存储的系统都会在这项工作上耗费大量时间。...本文将介绍如何利用 RestQL 来非常有效地减少「数据操作」相关的工作量。 现状与挑战 我们先来做个假设。 假设系统中有 60 张表,每张表对应的接口都要有四种 CRUD 的 API。...如果说我看得比别人远,那是因为我站在巨人的肩膀上。 所以我们在现有的技术基础上再抽象,把已有的东西重新组合起来,拼装成一个新的工具,帮助工程师从「体力活」中解脱出来,解放生产力。...例如需要使用include时: // query { _include: ['friends'] } // option for sequelize { include

1.6K50

【Node】sequelize 使用对象的方式操作数据库

3、查询 4、创建 5、更新 6、删除 7、事务 重头在增删改查这几个部分,重点记录下使用的场景和踩得坑,怎么用还是得看文章 1 数据库初始化 首要工作就是使用 sequelize 连接上数据库,如下...2、定义设置器(get,set) 有的数据出库入库的时候,需要做一些额外的处理,这时就适合放到 设置器去做,比如 2.1 时间格式化 function MyModel(sequelize, DataTypes...('NOW') }, }, }, }); 3.2 查询 - 关联表 简单描述下 通常不同类型的数据存放不同的表,但是不同表的数据之间是有关联的,比如 用户表和 评论表,所以需要表与表之间建立联系...}, }, ], }); 使用场景 1、给include 关联的表的数据排序 await person.findAll({ // 以关联表 comments 的 id...paranoid: true, // beforeDestroy 和 afterDestroy hook 只会在具有 onDelete: 'CASCADE' 和 hooks: true 的关联上被调用

8.6K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Sequelize笔记

    Mysql Linux下的Mysql 数据库名与表名是严格区分大小写的; 表的别名是严格区分大小写的; 列名与列的别名在所有的情况下均是忽略大小写的; 变量名也是严格区分大小写的。.../config/db') const Article = sequelize.define( // 这将控制自动生成的foreignKey和关联命名的名称 'article',...(User, { as: 'to_user', foreignKey: 'to_userid', targetKey: 'id' }) 一对多:hasMany 一对多关联将一个来源与多个目标连接起来....idc,Car表主键:color // Show.hasMany(Car, { foreignKey: 'idc', sourceKey: 'color' }) 多对多:belongsToMany 多对多关联用于将源与多个目标相连接...// 且同时自动修改article_tag的数据(该删除的删除,该增加的增加) 查找 await Article_tag.findAndCountAll({ include: [

    3.8K10

    Sequelize 系列教程之一对多模型关系

    它具有强大的事务支持,关联关系、读取和复制等功能。在阅读本文前,如果你对 Sequelize 还不了解,建议先阅读 Sequelize 快速入门 这篇文章。...Project 模型(作为参数传递的模型)是 target 。 HasMany 一对多关联将一个来源与多个目标连接起来。 而多个目标接到同一个特定的源。...根据当前的设置,表中的列将被称为 projectId 或project_id。 Project 的实例将获得访问器 getWorkers 和 setWorkers。...有时你可能需要在不同的列上关联记录,这时候你可以使用 sourceKey 选项: const City = sequelize.define('city', { countryCode: Sequelize.STRING...关于各种 join 的区别,可以参考:a-visual-explanation-of-sql-joins。 参考资源 Sequelize 和 MySQL 对照 Sequelize 中文文档 - 关联

    12.3K30

    Sequelize 系列教程之多对多模型关系

    它具有强大的事务支持,关联关系、读取和复制等功能。在阅读本文前,如果你对 Sequelize 还不了解,建议先阅读 Sequelize 快速入门 这篇文章。...Project 模型(作为参数传递的模型)是 target 。 belongsToMany 多对多关联用于将源与多个目标相连接。 此外,目标也可以连接到多个源。...const tag = await Tag.create({ name: 'tag' }); await note.addTag(tag, { through: { type: 0 } }); 这种方法和上面的方法实际上是一样的...):设置当前 note 记录,与 tag3、tag4 之间的关联信息,对应的 SQL 语句如下: INSERT INTO `taggings` (`type`,`createdAt`,`updatedAt...查询所有满足条件的 note,同时获取每个 note 相关联的 tag: const notes = await Note.findAll({ include: [ { model

    12.8K30

    sequelize常用api

    查询方法 一般我们在使用*sequelize的方法查询时,一般语法是这样的: /** 数据库模型.方法名(各种查询条件) */ User.findOne({where:{username:req.body.username...}}) 例如上方分为三部分,User为自己定义的数据库模型,其实也就代表用这个模型间接的操作数据库,findOne是查询方法,这里提供了多种方法,后面一一解释,在后面需要给这个方法传递的参数有很多,就是这种搜索的显示条件...提供了 order and group 参数,来与 ORDER BY 和 GROUP BY 一起使用....(首选方法) [Subtask.associations.Task, 'createdAt', 'DESC'], // 将使用关联对象按嵌套关联模型的 createdAt 排序....(首选方法) [Subtask.associations.Task, Task.associations.Project, 'createdAt', 'DESC'], // 将使用简单的关联对象按关联模型的

    7.9K30

    Sequelize入门

    它具有强大的事务支持, 关联关系, 预读和延迟加载,读取复制等功能. Sequelize 遵从 语义版本控制. 支持 Node v10 及更高版本以便使用 ES6 功能....术语约定 请注意,在上面的示例中,Sequelize 是指库本身,而 sequelize 是指 Sequelize 的实例,它表示与一个数据库的连接. 这是官方推荐的约定,在整个文档中都将遵循....阅读文档的提示 我们鼓励你在阅读 Sequelize 文档时在本地运行代码示例. 这将帮助你更快地学习....除此之外,如果你想使用 Sequelize 连接到已经充满了表和数据的数据库,那也可以正常工作! 在两种情况下,Sequelize 都能满足你的要求....例如Winston 或 Bunyan),显示第一个参数 logging: logger.debug.bind(logger) // 使用自定义记录器的另一种方法,显示所有消息 }); Promises

    1.4K20

    Web前端学习 第8章 egg基础教程4 sequelize

    一、ORM框架概述 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。...一种简单的方案是采用硬编码方式,为每一种可能的数据库访问操作提供单独的方法。 这种方案存在以下不足: 持久化层缺乏弹性。...一旦出现业务需求的变更,就必须修改持久化层的接口 持久化层同时与域模型与关系数据库模型绑定,不管域模型还是关系数据库模型发生变化,毒药修改持久化曾的相关程序代码,增加了软件的维护难度。...Java典型的ORM中间件有:Hibernate,ibatis,speedframework。 ORM的方法论基于三个核心原则: 简单:以最基本的形式建模数据。...14 as: 'clazz'//将关联的数据显示到该字段上 15 }) 16 } 17 18 return Students; 19 } 四、

    1.3K10

    【融职培训】Web前端学习 第8章 egg基础教程4 sequelize

    一、ORM框架概述 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。...一种简单的方案是采用硬编码方式,为每一种可能的数据库访问操作提供单独的方法。 这种方案存在以下不足: 持久化层缺乏弹性。...一旦出现业务需求的变更,就必须修改持久化层的接口 持久化层同时与域模型与关系数据库模型绑定,不管域模型还是关系数据库模型发生变化,毒药修改持久化曾的相关程序代码,增加了软件的维护难度。...Java典型的ORM中间件有:Hibernate,ibatis,speedframework。 ORM的方法论基于三个核心原则: 简单:以最基本的形式建模数据。...14 as: 'clazz'//将关联的数据显示到该字段上 15 }) 16 } 17 18 return Students; 19 } 四、

    1.3K20

    Sequelize 系列教程之一对一模型关系

    它具有强大的事务支持,关联关系、读取和复制等功能。在阅读本文前,如果你对 Sequelize 还不了解,建议先阅读 Sequelize 快速入门 这篇文章。...Project 模型(作为参数传递的模型)是 target 。 BelongsTo BelongsTo 关联是在 source model 上存在一对一关系的外键的关联。...' }); // 将 fk_company 添加到 User HasOne HasOne 关联是在 target model 上存在一对一关系的外键的关联。...// 在target模型中插入关联键 // Account的实例对象将拥有getUser、setUser、createUser方法 Account.belongsTo...在 Sequelize 里面定义关系时,关系的调用方会获得相关联的方法,一般为了两边都能操作,会同时定义双向关系(这里双向关系指的是模型层面,并不会在数据库表中出现两个表都加上外键的情况)。

    8.4K10

    你确定你的 REST API 真的符合 REST 规范?

    3.模型序列化 几乎所有现代服务器框架都以这样或那样的方式使用对象关系映射(ORM)。这意味着 API 使用的大部分资源是由模型及其实例和集合表示的。...不过,当一个模型需要几个不同的 JSON 表示,或者当对象包含嵌套的实体关联时,就比较复杂了。这个时候,你可能会开始通过继承、重用和序列化器链接等特性来解决这些问题。...API 项目中使用,还可以在客户端应用程序项目中使用,以描述与 API 一起工作的函数中的类型。...使用单独的创建和编辑模型 通常,描述服务器响应的模型与描述用于 New 和 Update 模型的输入的模型不同。...在GitHub上发布 发布文档的最简单方法之一是GitHub Page。只需在存储库设置中为 /docs 文件夹启用对静态页面的支持,并将 HTML 文档存储在此文件夹中即可。

    29320

    Node.js 开发者需要知道的 13 个常用库

    你可以使用库来加速编码过程并促进代码重用,这将帮助你保持工作“DRY”(不重复你自己)。与框架不同的是,库是已完成的功能,可以在项目的任何开发阶段轻松使用。...通过它,你可以在Node.js服务器上轻松实现邮件的发送功能。 Nodemailer的核心:传输对象 Nodemailer的核心在于一个“传输对象”(transport object)。...它允许客户端浏览器和服务器之间进行实时、双向和基于事件的通信。通过低级连接和数字握手(如HTTP长轮询),Socket.IO确保了客户端与服务器之间的实时通信。...命名空间多路复用:通过支持命名空间多路复用,它减少了服务器上TCP连接的数量和使用的套接字端口,提高了效率。 Socket.IO的应用场景 想象你正在开发一个在线聊天应用,需要实时更新消息。...https://lodash.com/ 10、Axios:Node.js和浏览器中的HTTP客户端 在现代Web开发中,与后端服务的通信至关重要。

    1K21

    用ServBay快速构建下一代GraphQL应用

    GraphQL是由Facebook开发的一种数据查询和操作语言,用于API,并作为运行时用于执行这些查询的服务器端软件的一种方式。它提供了一种更高效、强大和灵活的替代REST的方法。...Node.js安装部署指南第2步:初始化Apollo服务器Apollo Server是一个开源的、与GraphQL规范兼容的服务器,它简化了GraphQL API的构建。...它具有强大的事务支持、关联关系、预加载和惰性加载、读取复制等功能。...我们将利用现有的 PostgreSQL 数据库应用程序映像,而不是在本地安装和配置它,该映像将在单独的 Docker 容器上运行。...Docker Hub 为您的映像提供安全的存储解决方案,确保它们可以轻松地跨不同环境和平台进行部署。与 GitHub 类似,Docker Hub 与各种部署平台无缝集成,包括 AWS 等流行的云服务。

    18700

    第二十九课 如何实现MetaMask签名授权后DAPP一键登录功能?

    关于这一部分的最后一点说明:MetaMask将web3.js注入到您当前的浏览器中,但实际上还有其他独立的浏览器也会注入web3.js,例如Mist。...第3步:用户获取他们的随机数(前端) 下一步是在后端添加一些样板代码来处理User模型上的CRUD方法,我们在这里不做。...“使用MetaMask登录”适用于这些移动浏览器。 关于移动应用程序,答案是肯定的,登录流程有效,但需要有很多准备工作的作为基础。作为基本准备工作,您需要自己重建一个简单的以太坊钱包。...幸运的是,有library可以帮助您。人们关心的关键信息是安全的,因为应用程序本身拥有私钥。在桌面浏览器上,我们将此任务委托给MetaMask。...我们还探讨了这种登录机制与传统电子邮件/密码或社交登录相比的权衡,无论是在桌面还是在移动设备上。

    11.3K52

    使用TS+Sequelize实现更简洁的CRUD

    Relational Mapping)工具来帮助我们与数据库打交道就可以减轻一部分不必要的工作量,Sequelize就是其中比较受欢迎的一个。...,所以就有了今天要说的真正的主角儿:sequelize-typescript CRUD终极版 装饰器实现模型定义 Sequelize-typescript是基于Sequelize针对TypeScript...i sequelize reflect-metadata sequelize-typescript 其次,还需要修改TS项目对应的tsconfig.json文件,用来让TS支持装饰器的使用: {...Sequelize不同的有这么几点: 模型的定义采用装饰器的方式来定义 实例化Sequelize对象时需要指定对应的model路径 模型相关的一系列方法都是支持Promise的 如果在使用过程中遇到提示...要知道使用某样东西的意义 最终的一个示例放在了GitHub上:notebook | typescript/sequelize 参考资料: mysql | npm sequelize sequelize-typescript

    2.7K20

    2024年Node.js精选:50款工具库集锦,项目开发轻松上手(三)

    TypeORM的优点 TypeScript集成:与TypeScript无缝集成,提升类型安全和代码质量。 面向对象的方法:将数据库表视为类,记录视为对象,增强了代码的可读性和可维护性。...提供了许多便利,但学习ORM概念以及与原始SQL查询相比的潜在额外工作量需要一定的时间投入。...广泛的语言支持:适用于多种编程和标记语言。 编辑器集成:与大多数流行的代码编辑器无缝工作。...框架集成:与Node.js、Express、Koa等流行框架无缝工作。...注意事项 虽然Helmet在提升Web应用安全性方面提供了显著优势,但可能会与其他中间件或服务器配置产生冲突。正确使用Helmet需要了解安全头及其含义。

    35610

    TypeScript在node项目中的实践

    : reflect-metadata: 大量装饰器的包都会依赖的一个基础包,用于注入数据 routing-controllers: 使用装饰器的方式来进行koa-router的开发 sequelize...6 utils 存放的各种日常开发中提炼出来的公共函数 7 types 存放了各种客制化的复合类型的定义,各种结构、属性、方法返回值的定义(目前包括常用的Promise版redis与qconf) controllers...所以,我们对原来koa的使用方法进行了一个较大的改动,并使用routing-controllers大量的应用装饰器来帮助我们处理大部分的非逻辑代码。...middleware 如果是全局的中间件,则直接在class上添加@Middleware装饰器,并设置type: 'after|before'即可。...sequelize+装饰器的方式,entity只是用来建立与数据库之间通讯的数据模型。

    1.7K20

    区块链一键登录:MetaMask教程(One-click Login with Blockchain: A MetaMask Tutorial)

    如果它看起来不太清楚,那是对的,因为我们会逐点解释它: MetaMask浏览器扩展 登录流程如何工作 为什么登录流程有效 让我们一起建设吧 它现在已经投入生产 移动设备上的缺点 请注意,尽管我们将使用连接到以太坊区块链...然后我们检查这publicAddress是否已经存在或不在后端。我们要么检索它,如果用户已经存在,或者如果不存在,我们在handleSignup方法中创建一个新帐户。...尤其如此,因为每个帐户都将与一个或多个公用地址相关联。 它不适用于移动设备:这值得自己阅读。 移动设备上的缺点 正如我们所看到的,web3这是登录流程的先决条件。...“使用MetaMask登录”适用于这些移动浏览器。 关于移动应用程序,答案是肯定的,登录流程正常,但准备工作有很多基础。基本上,你需要自己重建一个简单的以太坊钱包。...幸运的是,有些图书馆可以帮助您。关键的关键领域是自然安全,因为应用程序本身就拥有私钥。在桌面浏览器上,我们将此任务委派给MetaMask。

    7.9K21
    领券