服务端2月17日 18:52
TypeORM 查询该用 find 还是 QueryBuilder?三种方式适用场景对比TypeORM 查询数据有三条路:`find` 系列方法、`QueryBuilder`、原生 SQL。很多人上来就用 QueryBuilder,其实 80% 的查询 `find` 就够了——更简洁、类型安全、不容易出错。这篇把三种方式的适用边界和常见坑讲清楚。
## find:日常查询的首选
### 基础查询
```typescript
// 查所有
const users = await userRepository.find();
// 按 ID 查一条
const user = await userRepository.findOne({ where: { id: 1 } ...服务端2月17日 18:01
Next.js 状态管理该用哪个方案?Server Component 到 Zustand 怎么选Next.js App Router 引入了 Server Components 后,状态管理的思路和纯 SPA 完全不同。很多数据根本不需要客户端状态——服务端直接获取、渲染、返回 HTML,客户端零 JS 开销。只有真正需要交互的数据才用客户端状态管理。
## 先问:这个状态真的需要客户端管理吗?
| 场景 | 方案 | 需要 JS 吗 |
|------|------|-----------|
| 页面初始数据 | Server Component 直接 fetch | 不需要 |
| 用户个人信息 | Server Component + cookies | 不需要 |
| ...服务端2月17日 18:19
Next.js 错误处理全指南:error.tsx、global-error 和 API 错误分层方案Next.js 应用出错时,用户看到的不能是一个白屏或一堆报错代码。App Router 提供了分层错误处理机制——从组件级到全局级,每一层都有专门的文件处理。搞清这些层级,就能让错误发生时用户仍然能看到有意义的提示,而不是整个应用崩溃。
## 错误处理层级
```
组件内 try/catch → 处理可预期的业务错误
↓ 未捕获
error.tsx → 路由级 Error Boundary
↓ 仍未捕获
global-error.tsx → 全局兜底(根 layout 也崩了)
```
从内到外,每一层兜住上一层没处理的错误。
## erro...服务端2月17日 18:21
Next.js 缓存全解析:四层缓存机制和失效策略实战Next.js 的缓存机制是它的性能杀手锏,也是最容易让人困惑的部分。一个 `fetch` 请求可能被缓存 5 秒也可能永久缓存,取决于一行配置。搞不清缓存层级,就会出现"数据改了但页面没更新"的诡异问题。
## 四层缓存,各有各的失效机制
```
请求进来
→ 请求记忆(同一渲染周期内的去重)
→ 数据缓存(fetch 结果持久化)
→ 路由缓存(Router Cache,客户端缓存)
→ 完整路由缓存(构建时静态化)
```
从上到下,缓存粒度从细到粗。任何一层命中都不会继续往下查。
## 第一层:请求记忆(Request Memoization)
同一个 ...服务端2月17日 18:23
Next.js App Router vs Pages Router:核心区别和渐进式迁移指南Next.js 13 引入的 App Router 不是 Pages Router 的替代品——它是一套全新的架构,基于 React Server Components,改变了数据获取、渲染和路由的整个思维方式。迁移不是改个目录名那么简单。
## 核心区别一表看懂
| 维度 | Pages Router | App Router |
|------|-------------|------------|
| 目录 | `pages/` | `app/` |
| 路由文件 | `pages/about.js` | `app/about/page.tsx` |
| API 路由 | `p...服务端2月17日 18:24
Next.js App Router 国际化实战:路由、翻译、SEO 和语言切换多语言网站不是翻译几个字符串就完事——路由怎么设计、翻译文件怎么组织、SEO 的 hreflang 怎么配、切换语言时状态怎么保持,每个环节都有坑。Next.js App Router 提供了灵活的路由机制,但国际化方案需要自己搭。这篇给出一个完整的实战方案。
## 路由结构设计
App Router 推荐用动态路由段 `[lang]` 承载语言前缀:
```
app/
[lang]/
layout.tsx # 语言布局(加载翻译、设置 lang 属性)
page.tsx # 首页
about/
page.tsx ...服务端2月17日 20:02
TypeORM 查询缓存实战:Redis 配置、主动失效和策略选择数据库查询是后端应用最常见的性能瓶颈。TypeORM 内置了查询缓存,支持内存缓存和 Redis 缓存两种存储后端,能在不改动业务代码的情况下大幅降低数据库负载。这篇讲清楚怎么配、怎么用、以及缓存策略的选择。
## 两种缓存存储:数据库表 vs Redis
### 默认方案:数据库表缓存
不配置任何东西,TypeORM 默认用数据库的一张表存缓存:
```typescript
const dataSource = new DataSource({
type: 'mysql',
host: 'localhost',
username: 'root',
passwor...服务端2月17日 20:08
npm Scripts 进阶:生命周期钩子、参数传递和跨平台写法npm scripts 是 Node.js 项目里最朴素的自动化工具——在 `package.json` 里写一行命令,`npm run xxx` 就能执行。但它能做的远不止 `npm run dev`,生命周期钩子和参数传递这两个特性,很多人不知道。
## 基础用法
```json
{
"scripts": {
"dev": "nodemon index.js",
"build": "webpack --mode production",
"start": "node dist/index.js",
"test": "jest --coverag...服务端2月17日 20:08
npm 依赖类型全解析:dependencies、devDependencies 和 peerDependencies 怎么选`package.json` 里有 `dependencies`、`devDependencies`、`peerDependencies`、`optionalDependencies`——都叫依赖,到底什么区别?该往哪个里装?装错了会怎样?这篇一次讲清楚。
## dependencies vs devDependencies:唯一的本质区别
**生产环境装不装**——就这么简单。
| | dependencies | devDependencies |
|---|---|---|
| `npm install` | 安装 | 安装 |
| `npm install --produc...服务端2月17日 20:09
npm 包发布全流程:从零发布到私有 Registry 配置写好了一个工具库想发到 npm 上?或者公司内部需要搭建私有 npm 仓库管理通用组件?这篇讲清楚从零发布 npm 包的完整流程,以及私有 registry 的配置方式。
## 发布前的准备
### 1. 注册 npm 账号
```bash
npm adduser
# 按提示输入用户名、密码、邮箱
# 验证登录
npm whoami
```
### 2. package.json 必填字段
```json
{
"name": "@your-scope/package-name",
"version": "1.0.0",
"description": "一句话描述包的...