从零开始实现一个 NestJS - 实现控制器 本系列的相关代码存放于 InkSha/expressive: 一个简易的仿造 Nest.js 的 NodeJS 后台框架。 在这一环节,将实现一个路由控制器。 将实现: 路由前缀定义 子路由路径定义 子路由方法定义 路由参数传递 设置状态码 控制器示例 // 定义 user 前缀 @Controll 2025-02-27 实践 #框架#typescript#后端#设计思想
从零开始实现一个 NestJS - 元数据 尽管在 tsconfig.json 中已经启用了元数据。 但还是要引入 reflect-metadata 这个库。 // 入口文件 main.ts import 'reflect-metadata' 此外,还需要声明一些 token 作为绑定的元数据的 key。 // token.ts expor 2025-02-27 实践 #设计思想#框架#后端#typescript
从零开始实现一个 NestJS - 前言 从现在开始,我将实现一个简单的 NestJS。 用于学习 IoC (Inversion of Control 控制反转) 和 DI (Dependency Injection 依赖注入) 思想。 传统开发时,一切对象都由开发者手动创建,需要什么就 new 什么。并不通过中间者。 而 IoC 是一种设 2025-02-27 实践 #设计思想#后端#typescript#框架
使用 Worker 实现发版通知 目前的站点发版是由开发人员自己操作,运营人员通常需要等待开发人员完成发版后才知道进行了发版。 这就导致了如果开发人员在发版后如果忘记了通知运营人员,运营人员就无法知道网站进行了发版。为了解决这个问题,我们使用了 webhook 来实现发版通知。 当我们进行网站发版的时候,会触发一个 webhook, 2025-02-22 实践 #软件开发#配置#工具
在 React 中如何不依赖 state 获取表单数据 最近在弄一个选项面板,采用了一种不依赖 React state 来管理表单数据的新设计。 该设计基于 HTML 原生表单行为,通过配置表单元素的 name 属性,借助浏览器自动的数据收集机制,实现了一个灵活且高效的选项面板。运营人员可以轻松地配置和组合选项,设置选项间的关联条件(例如:选中选项 A 2025-02-21 实践 #前端#javascript#设计思想#心得
递归和迭代 递归和迭代在计算机编程中是很常用的思想。 递归简单来说就是将问题拆解为一个个子问题。而迭代则是在先前问题的基础上再重复一遍。 以走路从 A 点到 B 点为例。 递归的做法是将走路这个问题拆解为迈步这一子问题,接着不断的从当前位置迈步,直到到达 B 点。 迭代则是先走了一步,没到,那么就在走了一步的基 2025-02-16 算法 #编程#算法#数据结构#软件开发
JavaScript 原型链 JavaScript 中,万物皆对象(一种属性的集合)。 每个对象都有着它的原型。当调用一个方法,属性时,会首先在当前对象查找,查不到就查询对象原型,再查对象原型的原型,如此重复,直到最顶层返回 undefined。 原型链是通过 [[Prototype]]属性实现的,就像一条链表一样,每个对象的 2025-01-25 教程 #javascript#前端
JavaScript 闭包 闭包是 JavaScript 中最强大的特性之一。JavaScript 允许函数嵌套,并且内部函数可以访问定义在外部函数中的所有变量和函数,以及外部函数能访问的所有变量和函数。 但是,外部函数却不能够访问定义在内部函数中的变量和函数。这给内部函数的变量提供了一定的安全性。 此外,由于内部函数可以访问 2025-01-22 教程 #前端#javascript
简单的 JavaScript 入门教程 简介 JavaScript 编程语言允许你在 Web 页面上实现复杂的功能。如果你看到一个网页不仅仅显示静态的信息,而是显示依时间更新的内容,或者交互式地图,或者 2D/3D 动画图像,或者滚动的视频播放器,等等——你基本可以确定,这需要 JavaScript 的参与。 JavaScript 是 动 2025-01-20 教程 #前端#javascript
约定优于配置 约定优于配置是一种软件开发设计原则,通过约定减少配置需求,从而降低开发者的负担。 简单来说,就是大家达成共识:某些东西该如何组织、如何操作,作为默认行为来处理。当然,如果有特殊需求,仍然可以通过配置进行覆盖。 在前端项目中,这种设计理念非常常见。例如: 目录约定:src 目录放项目源代码,publi 2025-01-20 技巧 #心得#框架#配置#设计思想