news 2026/6/20 11:38:18

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/6/20 6:35:46

FreeRtos中I2C操作过程中被任务切换或者中断打断会不会出问题

疑问&#xff1a;一直有个疑问就是一些外设的驱动需不需要加临界区&#xff0c;比如i2c&#xff0c;我要写操作&#xff0c;要操作片选&#xff0c;写寄存器地址&#xff0c;写入数据&#xff0c;再操作片选。不加的话在写的中间有别的中断打断导致时序会不会出问题答&#xff…

作者头像 李华
网站建设 2026/6/16 9:31:17

前端——单元测试实践

背景问题&#xff1a; 需要为 Vue3 Vite 项目编写单元测试。 方案思考&#xff1a; 使用 Vitest 作为测试框架&#xff0c;结合 vue/test-utils 进行组件测试。 具体实现&#xff1a; 安装测试依赖&#xff1a; # 安装 Vitest 和 Vue 测试工具 npm install -D vitest vue/test…

作者头像 李华
网站建设 2026/6/10 16:25:50

Vue 3 中的具名插槽仍然完全支持,Vue 2 的旧语法 Vue 3 中已废弃

Vue3中具名插槽的使用方式更加统一和简洁。新版本采用v-slot指令&#xff08;简写为#&#xff09;替代Vue2的slot和slot-scope属性&#xff0c;支持默认插槽、具名插槽和作用域插槽。子组件通过name属性定义插槽&#xff0c;父组件使用#插槽名语法插入内容。Vue3还增强了动态插…

作者头像 李华
网站建设 2026/6/15 18:26:30

Roots.ai团队推出GutenOCR:让AI既能读字又能精准定位

这项由Roots.ai团队开展的研究发表于2026年1月的arXiv预印本服务器&#xff0c;论文编号为arXiv:2601.14490v1。有兴趣深入了解技术细节的读者可以通过该编号查询完整论文。 当你用手机扫描一份文件时&#xff0c;是否曾经遇到过这样的困扰&#xff1a;软件能够识别出文字内容&…

作者头像 李华
网站建设 2026/6/10 15:01:57

Parameter Lab团队揭示:微调大模型如何意外引发“隐私坍塌“

当我们把大型语言模型比作一个刚入职的新员工时&#xff0c;微调就像是对其进行岗位培训。原本我们认为这种培训只会让AI变得更专业、更有用&#xff0c;就像教会新员工使用公司特定的软件或遵循特定的工作流程一样。然而&#xff0c;Parameter Lab、图宾根大学、达姆施塔特工业…

作者头像 李华
网站建设 2026/6/15 21:23:13

低分辨率图像目标检测性能验证:YOLOv8集成SPD-Conv的实战评测与优化

文章目录 SPD-Conv:革新低分辨率图像和小目标检测的新型CNN构建块完整教程 引言 1. SPD-Conv 技术背景与核心原理 1.1 传统CNN架构的局限性 1.2 SPD-Conv的设计理念 1.3 SPD-Conv的工作机制详解 步骤1:空间到深度(Space-to-Depth)转换 步骤2:非步长卷积处理 2. 环境配置与…

作者头像 李华