96SEO 2026-06-15 07:07 35
咱就是说,Node 后端实现 JWT 认证及高级错误处理,这事儿其实挺常见的。
先来聊聊为什么需要 JWT 认证哈,你想啊,

第 个请求:用户登录,服务器验证密码通过第 个请求:用户查数据 —— 服务器:"你是谁?我不认识你"
需要一个机制让服务器在后续请求中认出用户。
常见两种方案:
一个是 Session,另一个就是 JWT 了。
JWT 是个啥JWT 是 JSON Web Token 的缩写,它是一种令牌,包含了用户信息且带签名。
一个 JWT 由三段组成,用 . 分隔:xxxxx.yyyyy.zzzzz
三个字段各有用途,其中 Payload 不是加密的,只是 Base64 编码,所以不要放敏感信息哈。
为啥要用 JWTJWT 无状态,适合分布式部署,不需要在服务端存储。
但它也有局限,比如无法主动失效,一个Yi签发的 token 没法撤销。
Node 后端如何实现 JWT 认证,你得生成 token,一般用 jsonwebtoken 这个库。
const ACCESSTOKENEXPIRES = '1h'
const REFRESHTOKENEXPIRES = '30d'
export function generateAccessToken: string {
return jwt.sign
}
export function generateRefreshToken: string {
return jwt.sign({ userId, type: 'refresh' }, JWTSECRET, {
expiresIn: REFRESHTOKEN_EXPIRES,
})
}
这里生成了两个 token,一个 access token,一个 refresh token。
access token 有效期短,比如一小时;refresh token 有效期长,比如 30 天。
客户端如何携带 Token一般放在 Authorization 头里,格式是 Bearer <token>
// 需要登录的路由:中间件必须在 route 之前
app.use
app.use
app.route
app.route
app.use 必须写在 app.route 之前,否则中间件不生效。
咱自定义个错误类 AppError,它继承自 Error,包含状态码、错误码等信息。
export class AppError extends Error {
public readonly statusCode: number
public readonly code: string
public readonly isOperational: boolean
constructor {
super
this.statusCode = statusCode
this.code = code
this.isOperational = isOperational
Error.captureStackTrace
}
}
统一错误处理:搞个全局错误处理器挂在 app.onError,捕获所有路由抛出的异常。
export function errorHandler {
if {
// 处理自定义错误
} else {
// 处理未预料的错误
logger.error
// 生产环境不暴露内部细节
return c.json
}
console.log 在生产环境不够用,pino 是结构化日志库,输出 JSON,可被日志系统解析检索。
import pino from 'pino'
const isDev = process.env.NODE_ENV !== 'production'
export const logger = pino({
level: isDev ? 'debug' : 'info',
transport: isDev ? { target: 'pino-pretty', options: { colorize: true } } : undefined,
})
顺便说下,为啥有些人的网站百度不收录呢? 害,有可Neng是因为网站结构不清晰,或者内容质量不高,你懂的。 说实话,这事儿挺复杂的。
再回到 JWT,这里还有个问题,就是密码哈希。 绝不Neng存明文密码,要用 bcrypt 这类库哈希后存库。
import bcrypt from 'bcryptjs'
export async function hashPassword: Promise<string> {
const saltRounds =
return bcrypt.hash
}
export async function verifyPassword(
password: string,
hash: string
): Promise<boolean> {
return bcrypt.compare
}
bcrypt 自动加盐,即使同样的密码每次哈希结果也不同。 验证时,它从存储的哈希里取出 salt 重新计算再比对。
双令牌机制Neng平衡安全和用户体验: access token 短命,泄露损失窗口小; refresh token 不频繁传输,泄露概率低; 用户不用频繁登录,因为 access 过期后Ke以用 refresh 无感换新。
总之,JWT + 双令牌 + 自定义错误类 + 全局错误处理 + pino 日志,这套组合拳Neng让你的 Node 后端认证体系geng健壮。
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback