服务端2月17日 18:05
React Server Components 是什么?和 Client Components 怎么配合?React Server Components(RSC)是只在服务端渲染的组件——它们的代码不会发送到浏览器。这是 React 架构的根本变化:组件不再默认跑在客户端,而是默认跑在服务端。
## RSC 解决什么问题
传统 React 应用把所有组件代码打包成 JS 发给浏览器。一个列表页可能有 200KB 的 JS,但大部分是数据获取和渲染逻辑,用户交互只占一小部分。用户要等 JS 下载、解析、执行完才能看到页面。
RSC 的解决方案:数据获取和渲染在服务端完成,只把 HTML 和少量交互代码发给浏览器。结果:更快的首屏、更小的 JS 包、更简单的数据获取。
## Server...服务端2月17日 18:06
Next.js Server Actions 怎么用?表单提交、状态管理和安全验证Server Actions 是 Next.js 的服务端函数——在服务端执行,客户端直接调用,不需要手写 API 路由。底层是 POST 请求 + 加密签名,比传统 fetch + API Route 更简洁。
## 基本用法
```tsx
// app/actions.ts
'use server'
export async function createPost(formData: FormData) {
const title = formData.get('title') as string;
const content = formData.get('c...服务端2月17日 18:08
Next.js 中间件怎么用?认证重定向、A/B 测试和 Edge Runtime 限制Next.js 中间件在请求到达页面之前执行,适合做认证检查、路由重写、A/B 测试等。它跑在 Edge Runtime 上,冷启动快但功能有限——不能用 Node.js API。
## 基本用法
在项目根目录创建 `middleware.ts`:
```typescript
import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';
export function middleware(request: NextRequest) {
// 请求到达...服务端2月17日 18:27
Next.js 性能怎么优化?Server Components、图片和缓存策略实战Next.js 性能优化从三个方向入手:减少客户端 JavaScript 体积、加快页面加载速度、优化数据获取策略。App Router 的 Server Components 天然比 Pages Router 快——大部分代码不发给浏览器。
## 1. Server Components 优先
App Router 默认所有组件都是 Server Component。只在需要交互(useState、useEffect、onClick)时才加 `'use client'`:
```tsx
// Server Component(默认)— 不发 JS 给浏览器
export defa...服务端2月17日 18:42
Next.js 应用有哪些安全风险?环境变量泄露、XSS 和 CSRF 防护实战Next.js 应用的安全风险主要来自三方面:服务端渲染(SSR)泄露敏感数据、API 路由缺乏认证、客户端代码暴露过多信息。逐个堵住就行。
## 1. 环境变量:服务端 vs 客户端
Next.js 的环境变量默认只在服务端可用。以 `NEXT_PUBLIC_` 开头的才会暴露给浏览器。最常见的错误:把数据库密码、API Key 加了 `NEXT_PUBLIC_` 前缀。
```bash
# .env.local — 只在服务端可用
DATABASE_URL=postgresql://...
STRIPE_SECRET_KEY=sk_live_...
# .env.local ...服务端2月17日 18:51
TypeORM 实体关系怎么定义?一对一、一对多、多对多装饰器详解TypeORM 用装饰器定义实体间的关系:一对一、一对多、多对多。关键是搞清谁是"拥有方"(存外键的一方),谁是"反方"(只声明关系不存外键)。
## 一对一(OneToOne)
一个人只有一个档案,一个档案只属于一个人:
```typescript
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@OneToOne(() => Profile, profile => profile.user)
@JoinColumn() // 外键加在这一侧(拥有方)
...服务端2月17日 18:53
TypeORM Active Record 和 Data Mapper 有什么区别?怎么选?TypeORM 支持两种数据访问模式:Active Record(实体自带 CRUD 方法)和 Data Mapper(通过 Repository 操作实体)。选哪种影响代码组织方式,但不影响功能。
## Active Record 模式
实体继承 `BaseEntity`,直接调用静态方法操作数据:
```typescript
@Entity()
export class User extends BaseEntity {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
...服务端2月17日 19:10
TypeORM 软删除怎么用?@DeleteDateColumn 配置和唯一约束冲突解决软删除不是真的删除数据,而是标记 `deletedAt` 字段,查询时自动过滤已删除的记录。TypeORM 内置支持软删除,一行配置开启。
## 开启软删除
在实体上加 `@DeleteDateColumn()`:
```typescript
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@DeleteDateColumn()
deletedAt: Date; // null = 未删除,有值...服务端2月17日 19:55
Node.js ORM 怎么选?TypeORM、Prisma、Sequelize、MikroORM 对比Node.js 的 ORM 主要有四个:TypeORM、Prisma、Sequelize、MikroORM。2025 年的格局:Prisma 增长最快,TypeORM 用量最大但有退潮趋势,Sequelize 已经老化,MikroORM 是小众但口碑好。
## 四个 ORM 对比
| 维度 | TypeORM | Prisma | Sequelize | MikroORM |
|------|---------|--------|-----------|----------|
| 类型安全 | 弱(装饰器 + any) | 强(自动生成类型) | 弱 | 强 |
| 查询方式 | 装...