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 16:19:43

JAVA守护线程和本地线程的区别?

大家好&#xff0c;我是锋哥。今天分享关于【JAVA守护线程和本地线程的区别&#xff1f;】面试题。希望对大家有帮助&#xff1b;JAVA守护线程和本地线程的区别&#xff1f;在Java中&#xff0c;守护线程&#xff08;Daemon Thread&#xff09;和用户线程&#xff08;也称为本地…

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

基于STM32的智能楼梯灯系统

目录系统概述硬件组成核心功能软件设计应用场景优势特点源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;系统概述 基于STM32的智能楼梯灯系统是一种结合嵌入式控制与传感器技术的自动化照明解决方案。该系统通过实时监测人体活动&#…

作者头像 李华
网站建设 2026/4/16 14:26:05

弗吉尼亚大学等机构突破:AI医生实现十三种语言个性化诊疗

这项由弗吉尼亚大学联合印度理工学院巴特那分校、阿联酋穆罕默德本扎耶德人工智能大学等多所知名院校共同完成的研究发表于2025年1月19日&#xff0c;论文编号为arXiv:2601.13262v1。对这个研究领域感兴趣的读者可以通过该编号查询完整论文。 当医生面对不同国家的病人时&#…

作者头像 李华
网站建设 2026/4/18 12:00:24

哥本哈根大学新发现:AI事实核查中,证据比解释更重要

这项由丹麦哥本哈根大学计算机科学系与瑞典林雪平大学合作完成的研究发表于2025年&#xff0c;论文编号为arXiv:2601.11387v1&#xff0c;为我们揭示了在AI辅助事实核查过程中&#xff0c;人们究竟如何使用和评估AI系统提供的信息。在当今信息爆炸的时代&#xff0c;人们越来越…

作者头像 李华
网站建设 2026/4/16 13:53:53

FlashLabs首创语音对话黑科技:几秒钟录音就能让AI学会你的声音

这项由FlashLabs公司开发的突破性研究于2026年1月发表在计算机科学期刊上&#xff0c;文章编号为arXiv:2601.11141v1。有兴趣深入了解的读者可以通过该编号查询完整论文。 在科幻电影中&#xff0c;我们经常看到这样的场景&#xff1a;主人公只需要说几句话&#xff0c;AI助手就…

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

佐治亚理工学院团队破解AI智能体融合难题

这项由佐治亚理工学院联合达特茅斯学院和圣母大学开展的研究发表于2026年1月&#xff0c;论文编号为arXiv:2601.13572v1。有兴趣深入了解的读者可以通过该编号查询完整论文。 在当今人工智能的世界里&#xff0c;我们经常会遇到这样一个有趣的现象&#xff1a;有些AI智能体就像…

作者头像 李华