william.chan's blog

done is better than perfect

nestjs class-validator 教程

内置装饰器说明和如何自定义装饰器

在 NestJS 项目中,对用户提交的数据进行严格校验是必不可少的环节。NestJS 官方推荐使用 class-validator 配合 class-transformer 和 ValidationPipe 来完成优雅的、基于装饰器的数据校验(主要在 DTO 中使用)。 本文将介绍如何开启全局验证、常用的内置验证装饰器,并手把手教你编写自定义验证装饰器。 1. 安装与开启全局验证 首先...

nestjs DTO,VO 和 Entity

概念图解

在构建企业级 NestJS 后端应用时,随着业务复杂度的增加,直接让一个对象(如数据库实例)从头跑到尾是非常危险且难以维护的。为了保证各个架构层级(网关层、业务逻辑层、数据访问层)的职责分离,我们需要引入 DTO、Entity 和 VO 这三种核心数据载体。 本文将通过概念、流程图以及实际代码演示,带你彻底搞懂它们在 NestJS 中的定位。 架构层级划分 在企业级 NestJS 后端...

nestjs Redis GEO 快速入门

玩转地理位置:附近的人与门店搜索

在众多 LBS(Location-Based Services,基于位置的服务)应用中,像“附近的人”、“查找周围的共享单车”、“附近的餐厅”这样的需求层出不穷。如果在关系型数据库中直接使用复杂的经纬度公式去计算并排序距离,不仅计算代价大,而且性能极差。 Redis 自 3.2 版本之后引入了 GEO 数据结构,专门针对地理坐标的空间计算场景进行了高度优化。本文将带领你在 NestJS 中...

nestjs Nginx 实现灰度系统-多租户和非多租户

手把手教你搭建平滑过渡的灰度环境

灰度发布(又称金丝雀发布)是服务发布平滑过渡的重要手段。它可以在不中断核心业务的情况下,让部分用户先体验到新版本。如果有问题也能快速回滚,将影响面控制在最小。 今天我们来看一下,如何使用 Nginx 分别在非多租户(单租户)场景和多租户场景中实现一套优雅的灰度系统。 什么是灰度发布? 简单来说,灰度发布就是: 部署了新版本(V2),并保留老版本(V1)。 当流量进入 Nginx 网...

nestjs Nginx 核心用法

静态资源托管与反向代理负载均衡

在后端及大前端部署架构中,Nginx 一直扮演着举足轻重的角色。本文将带你通过 Docker 快速上手 Nginx,并深入掌握它的两大核心用法:静态资源托管与动态资源的反向代理及负载均衡。 一、配置与基础目录结构(基于 Docker) 我们通常通过 Docker 来快速拉起 Nginx 服务器: 1 docker run -d -p 80:80 --name my-nginx ngin...

nestjs passport-github2 实现Github第三方登录

在现代 Web 网站中,提供第三方 OAuth 登录(如 GitHub、Google、微信)可以极大降低用户注册的门槛。本篇文章将带你在 NestJS 中,利用 passport-github2 策略,实现标准的 GitHub OAuth2.0 授权登录流程。 准备工作:申请 GitHub OAuth App 在开始写代码之前,你需要去 GitHub 申请一个 OAuth Applica...

nestjs jwt access_token & refresh_token

双 token 实现登录鉴权

在现代 Web 应用的鉴权体系中,基于 JWT(JSON Web Token)的双 Token 机制(access_token 提供端点访问权限,refresh_token 负责无感刷新)是最常用的业界标准方案之一。 本文将带你在 NestJS 中,从 DTO 设计到双策略校验,一步步实现这套安全、可靠的双 Token 登录鉴权方案。 为什么需要双 Token? Access T...

nestjs 基于 RBAC 实现权限控制

RBAC(Role Based Access Control)基于角色的权限控制

RBAC(Role-Based Access Control,基于角色的访问控制)是业界最广泛使用的权限管理模型。本文将带你在 NestJS 中,从 DTO 设计到装饰器、守卫(Guard)的开发,一步步实现标准的 RBAC 权限控制。 RBAC 核心概念 在标准 RBAC 模型中,权限与角色相关联,用户通过成为适当角色的成员而得到对应的权限。其核心关系如下: User(用户):...

nestjs 基于ACL实现权限控制

ACL(Access Control List)访问控制列表

在后台管理系统中,权限控制是必不可少的一环。常见的权限模型有 RBAC(基于角色的访问控制)、ABAC(基于属性的访问控制)以及 ACL(访问控制列表)。 本文将带你一步步使用 NestJS 的核心特性(装饰器 Decorator 和 守卫 Guard)来实现一个基础的 ACL 权限控制系统。 1. 明确实现思路 在 NestJS 中,实现权限控制的推荐做法是: 认证(Auth...

nestjs 保存登录状态 JWT

原理解释,问题和解决方案

在前后端分离和微服务架构盛行的当下,JWT(JSON Web Token)成为了最流行的跨域认证解决方案。相较于传统的 Session + Cookie,JWT 带来了一种无状态的登录保持方案。 JWT 原理简介 与传统 Session 在服务端内存或 Redis 中保存用户状态不同,JWT 把用户基本状态信息(如用户 ID、角色、过期时间等)直接保存在客户端。 一个 JWT 字符串由...