Postgres.js 封装类型安全、支持事务的 DAO 层
前言众所周知,DAO 层(Data Access Layer)是一个后端开发中常见的概念,之前在用 Next.js 官方博客也建议新项目采用 DAO 层作为数据处理模型。
其实对于一些简单的需求来说 DAO 层并不是很重要,因为可以直接上 ORM 框架,以 TypeScript 代码的方式编写 SQL,还能获得比较完善的类型提示,就没有必要将 SQL 代码单独抽出来了。不过有时候可能需要对 SQL 有更加完整的掌控,这时就需要 DAO 层上场了。
咱平时用的数据库是 PostgreSQL,开源社区里这个数据库主要是两个驱动比较流行:node-postgres(npm 上的包名是 pg)和 Po ...
原子化 CSS 多主题切换
背景最近给自己的歌词本加上了主题切换的功能,因为最近爱上了暗色模式,但是有的时候浏览网站突然被一个不支持暗色的网站亮瞎…访问自己的歌词本的时候也被亮瞎,才意识到网站缺少暗色模式的支持。
另外也并不打算只支持两种颜色的主题,由于原本的亮色主题是淡淡的黄色背景加上些许杂色,请教了@筱枫,取名「亚麻」,而另外两种暗色模式分别取名「黑曜」和「真黑」。设计上黑曜是打算做一个偏蓝色的暗色主题,而真黑是 rgb(0, 0, 0) 的纯黑色。(主要用于 OLED)
废话疑似有点多了…下面进入正题,谈谈在 TailwindCSS 和 Unocss 中实现多主题的方式。
实现Unocss 这些原子化 CSS 工具 ...
不同场景的 Docker 代理设置
在使用 Docker 的时候因为各种各样的原因经常会用到代理,但是有没有小伙伴在网上搜索发现代理设置了 Docker 不认呢,就让小编来带你看看怎么会事吧。
其实 Docker 的代理设置分为三种场景——CLI 下的、容器中的和构建时的。对应的具体使用场景分别是 docker pull、容器运行过程中以及 docker build 过程中。
Docker pullDocker CLI 的操作由 dockerd 执行,因此需要设置 systemd 的代理。
在文件 /etc/systemd/system/docker.service.d/proxy.conf 中写入:
1234[Service] ...
认识 WebAuthn 并开发一个简单 Demo
之前某个睡不着的晚上不知道为何想起关于非对称算法(或者叫公钥加密),突发奇想,用户是否能不用密码,通过一个公私钥对向服务器注册和证明自己呢?结果一搜发现还真有这样的技术,那就是 WebAuthn。
记得 今年 去年年中(怎么这篇博客写了一年啊喂!)写过一篇关于 Credential Management API 的博客,至于为什么先写了那篇文章,大概因为咱搜索知识的时候是深度优先的吧(逃)。看过 MDN 文档的小伙伴肯定发现了这个 API 与 WebAuthn API 都集成在了 CredentialsContainer 这个对象上,本文就来简单地讲讲关于 WebAuthn 以及如何实现一个简 ...
使用 Nest 构建基础的用户登录鉴权应用
初始化 Nest 项目使用 nest new <name> 创建一个新的 Nest 项目,然后根据自己的喜好进行一定的自定义。
用户实体本文使用 Prisma 作为 ORM 框架,因此要先安装 Prisma 并初始化 Prisma schema 文件:
1npm i prisma && npx prisma init
然后编写用户实体字段,这里以基础的 id、username 和 password 三个经典字段举例:
1234567891011121314generator client { provider = "prisma-client ...
Flutter - 用熟悉的 Dart 来构建吧!
前言在 Android 开发中经常会遇到需要打包多个架构的包,还需要另外打一个 universal 的包,咱还需要在构建的同时为不同的架构输出不同的文件名,那么在 Flutter 上应该怎么做呢?
网上搜了一番发现许多信息都是过时的版本上的方法了,于是记录一下目前最新版本的方法,以及提供一个方便自己控制的使用 Dart 来构建项目的方法。
下面先贴一下咱的版本,避免版本不对而造成没必要的踩坑。
1234567891011121314$ .\android\gradlew.bat -v-------------------------------------------------------- ...
使用 Credential Management API 构建丝滑登录的 WebApp
相信每一个经常使用浏览器互联网冲浪的小伙伴对浏览器提示是否要保存密码和自动填充密码的对话框不陌生,实际上浏览器还提供了这样一个 API 用来提供更丝滑的登录体验:Credential Management API。网上查了一圈发现很少有谈这个 API 的,于是写一篇 Blog 记录一下。
要学习这个浏览器给咱们提供的便捷 API,要先看一下浏览器的这部分设置,这里以 Chrome 为例:
当你在一个陌生网站首次注册或者登录的时候,Chrome 会提示你是否要保存该网站的密码,“罪魁祸首”就是第一个选项,如果你不想使用 Chrome 的密码保存,关掉这个就好。
而第二个选项就与 Credent ...
浅谈 Nuxt 中如何实现未认证自动跳转
TL; DR如果没有对后端的掌控,可以考虑使用状态保存是否认证,在执行完服务端请求后判断认证的状态并决定是否跳转;如果有对后端的掌控权,可以添加一个专门用于验证 token 的接口,在 Nuxt Middlware 中请求接口,并决定是否跳转。
最佳的用户体验Nuxt 由于 SSR 的特性,可以从 Nuxt 服务端获取数据,因此可以在用户获取到页面之前就提前得知用户是否有权限访问当前页面,也就可以像 PHP/JSP 等 SSR 技术一样,做到用户访问直接跳转到登录页面,而并非是进入页面后弹出一个无权限提示再跳转达到登录页面。
符合直觉的代码思考到上面的需求,便写了一段看起来最符合直 ...
因为一行打印语句而失去的一天
TL;DR不要打印 PrismaClient 对象。
纪念一下因为这件事失去的一天。
发现的过程起因是咱在 Nuxt 里用 middleware 往 event.context 里塞了一个 PrismaClient,然后在另一个地方又不小心打印了一下 event。导致只要请求发过来,到了打印的位置就直接卡死,刷新页面提示「Reloading server」。
刚开始在怀疑是不是 Nuxt 的某个 bug,后来建立了好几个空项目测试,一次卡死的情况都没有出现。于是又怀疑是不是自己在连接 PrismaClient 的时候写了什么问题,但对着那七八行初始化数据库的代码进行了手动测试之后发现自己被骗 ...
咱是如何配置 Clash for Windows 分流的
前言咱们平时在使用 CFW 上网时,直接 global 并不是一种好的做法,因为这会导致许多没有必要绕过的流量也过了一遍代理,不仅浪费代理流量,也影响了速度。因此除非你有特殊的需求,日常使用通常来讲都是需要配置分流的。
本文会介绍 CFW 的分流机制、简单的分流配置,以及咱最后灵活性更高一些的方式,还有在探索这个方式之中的一些踩坑。
CFW 分流机制Proxy从服务提供商处获取 Profile(配置文件)后,就可以在 CFW 中使用 Profile 中定义的 Proxy。这些 Proxy 需要配合规则进行使用,由规则匹配流量,最终决定要使用哪个 Proxy 代理这些流量,这就是 CFW 的基本 ...
Transmission 搭建记录
Transmission 安装Windows从官网下载官方 msi 安装包,运行后根据引导进行安装即可。
需要注意的是安装时的几个选项的意思:
Qt client:带 GUI 的客户端,用于连接 Transmission 服务。
Daemon:Transmission 的守护程序。
Command-line tools:Transmission 的命令行工具。
Web Interface:WebUI 客户端,作用与 Qt client 一样,不过是在浏览器中访问,会方便一点,使用体验上不如 Qt client。
安装完成后,打开 C:\Windows\ServiceProfiles\Loc ...
记录一次 ttrss 迁移
记录一次 ttrss 的迁移过程,包括 postgres 数据库备份与恢复,nginx 配置 https 站点等,参考了网上的另一篇迁移文章。其实当时在做的时候是完全按照这篇文章来的,但由于文章的时效性等等方面的问题导致实践中遇到了一些坑,于是对原文中的流程进行了一定更改,记录了咱自己的迁移过程。
备份先保证原机器上的 postgres 容器正在运行中,然后使用 pg_dump 工具来备份数据库:
1docker exec postgres pg_dump -c -U postgres -Fc ttrss > export.dmp
此处建议使用 -Fc 参数导出数据库备份文件,而不是默 ...
Pinia 快速上手
快速上手 Pinia 基础使用
SSH 太慢?Git HTTPS 多账户管理教程来辣!
之前有写过 一篇文章 讲如何在 Git 中配置 ssh 多密钥管理,达到方便地切换 Git 使用的 ssh 的目的。
但是相信你能明显感觉到 ssh 比 https 慢了许多倍,而 ssh 多密钥管理,只有修改 ssh 里的 host 为你的配置 host 才有效,显然不能在 https 协议的 url 下生效。
不过不用担心,因为咱们遇到的难题其实很早就有人解决过了,今天就让咱来分享一下如何在 Git 上使用 HTTPS 的多账户管理。
Windows由于咱只有 Windows 设备,所以只说 Windows 下的方法吧(如果以后有了别的设备可能会回来填坑?)。
安装在 Windows 下, ...
GitHub Pages 证书过期 Cloudflare SSL 握手失败解决方法
最近突然发现咱的博客打不开了,一个来自 Cloudflare 的大大的 SSL 握手失败糊在咱的脸上。(瞳孔地震)
不是说 Cloudflare 会自动续证书的喵???(小小的眼睛充满大大的疑惑)
两个证书咱直接爬起床打开 Cloudflare,研究了会儿,终于知道是什么情况。
由于咱的博客是部署在 GitHub Pages 上,Cloudflare 只是一层代理,用户访问的时候是访问到的 Cloudflare,实际是 Cloudflare 帮咱们访问了 GitHub Pages,不过 Cloudflare 会做一层缓存。
那么这个过程中其实存在两次访问:用户访问 Cloudflare,Clo ...