news 2026/9/23 17:52:51

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/9/22 17:09:44

开发中的测试知识—— 集成测试策略

背景问题&#xff1a; 需要对复杂功能进行集成测试。 方案思考&#xff1a; 使用端到端测试和组件集成测试相结合的策略。 具体实现&#xff1a; 端到端测试配置&#xff08;Playwright&#xff09;&#xff1a; # 安装 Playwright npm install -D playwright/test npx playwri…

作者头像 李华
网站建设 2026/9/22 11:29:24

MATLAB分形维数计算:1D/2D/3D图形的盒维数实现

一、盒维数计算原理 盒维数&#xff08;Box-counting dimension&#xff09;通过统计覆盖分形对象所需不同尺寸的盒子数量&#xff0c;建立盒子尺寸与数量的幂律关系&#xff0c;其分形维数 D满足&#xff1a;其中 N(ϵ)N(ϵ)N(ϵ)为覆盖对象所需边长为 ϵϵϵ的盒子数量。二、…

作者头像 李华
网站建设 2026/9/23 2:01:52

基于STM32的智能家居安防系统

目录 STM32智能家居安防系统概述核心功能模块软件设计要点低功耗优化扩展功能典型硬件选型 源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; STM32智能家居安防系统概述 STM32系列微控制器因其高性能、低功耗和丰富的外设资源&#xff…

作者头像 李华
网站建设 2026/9/22 23:48:35

Python篇---提升Python代码性能

提升Python代码性能&#xff1a;从蜗牛到火箭的秘诀 一、一句话理解 提升代码性能 减少计算机的"工作量" 选择更快的"工具" 就像送外卖&#xff1a; ❌ 一次只送一单&#xff0c;来回跑10次&#xff08;慢&#xff09; ✅ 一次规划好路线&#xff0c…

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

Composition 英文单词学习

1️、基本信息 单词&#xff1a;composition 词性&#xff1a;名词 发音&#xff1a; &#x1f1fa;&#x1f1f8; /ˌkɑːm.pəˈzɪʃ.ən/&#x1f1ec;&#x1f1e7; /ˌkɒm.pəˈzɪʃ.ən/ 词源&#xff1a; 来自拉丁语 componere&#xff08;一起放置 → 组合、构成…

作者头像 李华
网站建设 2026/9/23 7:24:33

导师严选9个AI论文平台,自考学生轻松搞定毕业论文!

导师严选9个AI论文平台&#xff0c;自考学生轻松搞定毕业论文&#xff01; AI 工具助力论文写作&#xff0c;高效又省心 在当前的学术环境中&#xff0c;越来越多的学生开始借助 AI 工具来辅助论文写作。尤其对于自考学生而言&#xff0c;时间紧张、资料繁杂、写作经验不足等问…

作者头像 李华