Toggle navigation
william.chan's blog
Home
Archive
vue3-json-schema-form
zhuanlan
jingdong
Archive
Stay hungry, stay foolish
Show All
84
JavaScript
14
NestJS
14
Linux
11
React
11
NodeJS
8
Ruby
6
CSS
5
Shell
5
Redux
4
Gem
3
vscode
3
vim
2
website
2
其他
1
开发文档
1
技巧
1
概念
1
AOP
1
Git
1
Halo
1
Jekyll
1
Mac
1
MySQL
1
Rails
1
Vue
1
css
1
geektime
1
git
1
webpack
1
2026
Module 和 Provider 的循环依赖如何处理?
先各自创建,再用 forwardRef 关联。forwardRef 是”实在拆不开时的兜底方案”,不是首选方案。
nestjs 切换不同上下文
为了让 Filter、Guard、Interceptor 支持 http、ws、rpc 等场景下复用,Nest 设计了 ArgumentsHost 和 ExecutionContext 两个类。
nestjs Metadata & Reflector
Nest 的实现原理是通过装饰器给 class 或对象添加元数据,然后,初始化的时候取出这些元数据,进行依赖分析,创建对应的实例对象
nestjs 自定义装饰器
Nest 内置了很多装饰器,大多数功能都是通过装饰器来使用
nestjs session & cookie
在 Web 开发中,理解 HTTP 的无状态特性是掌握身份认证的前提。为了让服务器认识“你是谁”,Session 和 Cookie 这对经典的组合应运而生。
nestjs 核心装饰器有哪些
NestJS 深度依赖 TypeScript 装饰器(Decorators)来实现依赖注入、路由分发和面向切面编程(AOP)。
AOP 架构
AOP的好处是可以把一些通用逻辑分离到切面中,保持业务逻辑的纯粹性,这样切面逻辑就可以复用,还可以动态增删
Nest 全局模块和生命周期
避免重复 imports。支持在创建和销毁时执行一些逻辑。
Nest providers 4种类别
使用多种 provider,灵活注入对象
Nest项目断点调试
查看代码整个执行路线 - 作用域,调用栈 - 通过单步执行查看变量变化
IoC 解决了什么问题?
IoC 使开发者免去手动创建和组装对象的麻烦,改成声明依赖,让工具自动创建组装对象
5种 HTTP 数据传输方式
给接口传递参数的5种方式
nest 命令
@nestjs/cli 工具使用方法
一张后端架构图
学习各种后端中间件
2025
命令行
命令行常用的指令
cool website
2.Vim 的键描述体例 + Vim 的选项和配置 + 光标移动 + 文本修改
1.vim + vimtutor + vim中文文档
2024
halo主题开发流程
仅三行halo主题开发流程命令即可完成
2020
Git仓库迁移,包括所有的分支、标签、日志
仅三行命令即可完成
Vue route running on github pages
vue3 github-pages 404.html
3x3魔方-七步法
3x3魔方-七步法
概念: 什么是框架 framework
类比 Vue, React, koa, ruby on rails
NodeJS: 50行代码学会koa2中间件原理
koa: Next generation web framework for NodeJS
JavaScript: async函数
async函数是使用async关键字声明的函数。
JavaScript: bind,apply,call三者的区别
bind,call,apply的作用都是用来改变this指向的
JavaScript: 关于类型,有哪些你不知道的细节?
从运行时的角度去看 JavaScript 的类型系统
css: 要求超过两行的文本显示为两行文字
最多显示两行文字的css样式设置
JavaScript: 函数注释规范
JSDoc Guide
JavaScript: 立即执行函数前面添加分号';'的作用
;(function(){})();
CSS: 单行和多行文字溢出
ellipsis
CSS: canvas绘制曲线生成工具
二次贝赛尔曲线
CSS: calc() and line-height
CSS的单位及css3的calc()及line-height百分比
CSS: box-shadow
box-shadow: h-shadow v-shadow blur spread color inset;
JavaScript: event.clientX and offsetLeft
clientX, offsetLeft, offsetWidth
JavaScript: 避免事件重复触发
js性能优化
CSS: 在.css文件中对样式进行分组
将分组后的样式折叠起来
JavaScript: javascript 中x++和++x的不同
++ 含有隐式的赋值
JavaScript: es5 中的模块介绍
为模块定义引入包装函数,并保证它的返回值和模块的API保持一致。
JavaScript: 区分函数声明和表达式最简单的方法
function 关键字是否位于声明的开始
React: react UI组件的业务逻辑
import connect from 'react-redux';
React: 在react中通过ref获取input值
this.refs.user.value, ref='user'
React: 生命周期流程图
挂载、更新和卸载
JavaScript: 事件传递的3个阶段
addEventListener、捕获、事件处理阶段和冒泡
NodeJS: nvm 和 npm 使用淘宝镜像
设置环境变量 NVM_NODEJS_ORG_MIRROR
Mac: mac2015菜单栏不显示隔空播放
2016年之前推出的 MacBook Pro不支持
Redux: store.dispatch(getAllProducts());
问什么 getAllProducts() 返回一个函数而不是一个action?
React 组件生命周期流程图
创建-更新-卸载
Linux: tree 命令
tree命令以树状图列出文件目录结构
webpack 4.43.0: TypeError: CleanWebpackPlugin is not a constructor
new CleanWebpackPlugin() // 清除文件
Git: .gitkeep
对于空目录的追踪我们可以用.gitkeep来做
浏览器站内搜索技巧
可以叠加使用下面的搜索技巧来搜索需要的内容
NodeJS: npm -D -S -g -i 以及安装技巧
npm i webpack webpack-cli -D
vscode: Warnning Incorrect type. Expected "String"
vscode json format
Node: npm 默认源切换
npx nrm ls
React: 前端报错 node-pre-gyp WARN Using request for node-pre-gyp https download解决方法
这是权限不够的问题,下载的时候加上 --unsafe-perm
React: 生命周期方法
React中渲染过程的概览
React: 认识React
关于React的基本概念
React: 使用 react-router-dom 实现页面跳转
react router
JavaScript: false value
js中布尔值为false的6种情况和js数据类型
Redux 中几个常用方法
react + redux
React: mapStateToProps
https://react-redux.js.org
React: reducer visibilityFilter returned undefined
Error: Given action SET_VISIBILITY_FILTER, reducer visibilityFilter returned undefined.
CSS: 手动清除浮动 float
clear: both
记录读过的博客文章
说明一个概念或者解决了一个问题
Linux: sudo ls /root
谁可以使用 允许使用的主机=(以谁的身份) 可执行命令的列表
Linux: su命令与用户名之间的减号`-`
su - linuxprobe 这意味着完全切换到新的用户
linux 计划任务 at 和 crontab
at 一次性计划任务;crontab 周期性计划任务
Shell中的 exit 0 与 exit 1 的区别
echo $? 为 0 表示程序正常退出,非 0 表示程序异常
MySQL: show index && explain select ...
用 explain 语句判断select查询是否使用了索引
Linux: process VS thread
进程和线程的区别介绍
Gem: Sidekiq 如何处理异步任务
Gem: sidekiq清空队列的两种方式
一是使用sidekiq的api,二是直接操作redis
Ruby: 类查找中 :: 的作用
:: 表示从顶层开始搜索
Gem: 显示 Sidekiq Web UI
显示出sidekiq web ui的相关操作
Ruby 语法:File.expand_path
项目中看到的 ruby 语法备注
Linux 操作系统:/etc/passwd
《Linux 操作系统》用户账号文件 passwd
Linux 操作系统:zip压缩
《Linux 操作系统》zip 用法介绍
Linux 操作系统:tar
《Linux 操作系统》tar 归档程序的用法介绍
Jekyll 语法使用说明
收集和记录一些不熟悉的 Jekyll 语法
Linux 操作系统:gzip 和 gunzip
《Linux 操作系统》gzip 文件压缩程序的用法介绍
2019
Ruby 中的 require 和 加载路径 $LOAD_PATH
2018
JavaScript 对象模型
对象模型:基于类 class VS 基于原型 prototype
rails导出Excel数字类型数据出现乱码的问题
DONE IS BETTER THAN PERFECT