news 2026/4/18 5:03:22

Node.js——Node.js 中间件与控制器实现问题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Node.js——Node.js 中间件与控制器实现问题

问题难点

在实现复杂的业务逻辑时,如何正确使用中间件处理请求、如何设计高效的控制器成为关键问题。

解决方案

Egg.js提供了灵活的中间件机制和基于装饰器的控制器实现方式。

Demo代码:

// app/middleware/auth.ts - 认证中间件import{Context,Next}from'egg';exportdefaultfunctionauth(options:{required?:boolean}={}){returnasync(ctx:Context,next:Next)=>{consttoken=ctx.request.header.authorization;if(options.required!==false&&!token){ctx.status=401;ctx.body={error:'未提供认证令牌'};return;}// 简单的token验证逻辑try{// 实际应用中应使用JWT或其他安全的认证方式if(token==='Bearer valid-token'){ctx.user={id:1,name:'admin'};// 将用户信息挂载到上下文awaitnext();}else{ctx.status=401;ctx.body={error:'无效的认证令牌'};}}catch(error){ctx.status=500;ctx.body={error:'认证服务异常'};}};}// config/config.default.ts - 配置中间件import{EggAppConfig,PowerPartial}from'egg';exportdefault()=>{constconfig:PowerPartial<EggAppConfig>={};config.middleware=['auth','robot'];// 应用全局中间件// 中间件配置config.auth={required:true,};config.robot={ua:[/Baiduspider/i],};returnconfig;};// app/controller/user.ts - 控制器实现import{Controller}from'egg';exportdefaultclassUserControllerextendsController{/** * 获取用户列表 */publicasyncindex(){const{ctx}=this;constquery={page:parseInt(ctx.query.page)||1,pageSize:parseInt(ctx.query.pageSize)||10,};try{constresult=awaitctx.service.user.list(query);ctx.body={success:true,data:result.users,pagination:result.pagination,};}catch(error){ctx.logger.error('获取用户列表失败:',error);ctx.body={success:false,message:'获取用户列表失败',};ctx.status=500;}}/** * 创建新用户 */publicasynccreate(){const{ctx}=this;try{constuserData=ctx.request.body;constuser=awaitctx.service.user.create(userData);ctx.body={success:true,data:user,};ctx.status=201;}catch(error){ctx.logger.error('创建用户失败:',error);ctx.body={success:false,message:error.message||'创建用户失败',};ctx.status=400;}}/** * 获取指定用户 */publicasyncshow(){const{ctx}=this;constid=ctx.params.id;try{constuser=awaitctx.service.user.findById(id);if(!user){ctx.status=404;ctx.body={success:false,message:'用户不存在',};return;}ctx.body={success:true,data:user,};}catch(error){ctx.logger.error(`获取用户${id}失败:`,error);ctx.body={success:false,message:'获取用户失败',};ctx.status=500;}}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 5:05:36

uni-app—— 小程序表单页面键盘弹起布局错乱问题

问题现象 表单页面点击输入框&#xff0c;键盘弹起后&#xff1a;平台表现安卓输入框位置错位&#xff0c;光标飘到其他位置iOS键盘遮挡输入框&#xff0c;看不到输入内容问题原因 当页面同时存在以下三个因素时&#xff0c;容易出现布局错乱&#xff1a; scroll-view float布…

作者头像 李华
网站建设 2026/4/18 5:07:38

什么是Java可重入锁?

大家好&#xff0c;我是锋哥。今天分享关于【什么是Java可重入锁&#xff1f;】面试题。希望对大家有帮助&#xff1b; 什么是Java可重入锁&#xff1f; Java 可重入锁&#xff08;Reentrant Lock&#xff09;是 Java 中的一种高级同步工具&#xff0c;用于控制对共享资源的访…

作者头像 李华
网站建设 2026/4/18 5:06:34

基于MATLAB的三维装箱程序实现(遗传算法+模拟退火优化)

一、核心算法框架 三维装箱问题通过**遗传算法&#xff08;GA&#xff09;全局搜索与模拟退火&#xff08;SA&#xff09;**局部优化结合&#xff0c;解决多约束条件下的最优装箱问题。核心流程如下&#xff1a;数据输入&#xff1a;读取货物尺寸&#xff08;长宽高&#xff09…

作者头像 李华
网站建设 2026/4/18 5:06:26

基于YOLOv8和RepGhost的轻量化目标检测优化与性能提升

文章目录 一、为什么毕设需要RepGhost? 二、RepGhost核心原理:“训练时变强,推理时变快” 1. 幽灵特征生成 2. 重参数化多分支结构 三、实战:给YOLOv8植入RepGhost“轻量化引擎” 环境准备 1. RepGhost模块实现 2. 改造YOLOv8配置文件 3. 训练与推理 训练命令 推理命令 四、…

作者头像 李华
网站建设 2026/4/18 7:53:45

Android 12 on RK3588:ASoC音频驱动与电池管理系统(BMS)协同优化全流程详解

文章目录 前言 一、Android 12音频系统架构深度解析 1.1 整体架构概览 1.2 各层职责详解 1.3 数据流转机制 二、ASoC音频驱动框架核心原理 2.1 ASoC架构设计理念 2.2 三大组件详细分析 Platform驱动 - 数字音频接口的大脑 音频数据传输流程深度解析 Codec驱动 - 模拟世界的桥梁…

作者头像 李华
网站建设 2026/4/18 8:09:43

国家电网Java面试被问:混沌工程在分布式系统中的应用

一、核心理念&#xff1a;从电力系统可靠性工程借鉴 1.1 混沌工程与电力系统可靠性的共鸣 关键点&#xff1a;将电力行业的“N-1准则”、“黑启动演练”思想引入分布式系统 text 复制 下载 电力系统 vs 分布式系统&#xff1a; • N-1准则&#xff08;电力&#xff09; ↔ …

作者头像 李华