【nodejs】让nodejs像后端mvc框架(asp.net mvc )一样处理请求--路由限制及选择篇(2/8)【route】

简介: 文章目录前情概要上文中的RouteHandler中有一个重要方法GetActionDescriptor没有贴代码和说,接下来我们就说一说这个方法。使用controllerName、actionName、httpmethod获得唯一匹配的处理函数描述对象直接上代码,看代码注释即可//acti...

文章目录

前情概要

上文中的RouteHandler中有一个重要方法GetActionDescriptor没有贴代码和说,接下来我们就说一说这个方法。

使用controllerName、actionName、httpmethod获得唯一匹配的处理函数描述对象

直接上代码,看代码注释即可

//action注册缓存对象
let _dic_override = new Map<string, Map<string, ActionDescriptor>>();
//最终路由到action映射关系的缓存对象
let _dic_buid_routes: Map<string, Map<string, ActionDescriptor>>;

export function GetActionDescriptor(controllerName: string, actionName: string, method?: string): ActionDescriptor | undefined {
//没有build过,则build一下。把路由到action的映射关系解析好
    if (!_dic_buid_routes) build();
//获得controller描述对象
    var c = _dic_buid_routes.get(controllerName)
    if (!c)
        return;
        //从controller描述对象中获得对应action,先根据请求类型_action名称来获取,获取不到的情况下则直接用action名称来获取。
    var a = c.get(actionName + (method ? '_' + method.toLowerCase() : ''));
    if (!a)
        a = c.get(actionName)
    return a;
}
//对controller和action名称默认做小写处理。匹配的时候方便一点。url不区分大小写嘛。
//{"controllerName":{"post_addUser":{描述对象},"getuserinfo":{描述对象}}}。类似如此结构。
function build() {
    _dic_buid_routes = new Map<string, Map<string, ActionDescriptor>>();
    _dic_override.forEach((v, k, m) => {
        if (v.size <= 0)
            return;
        var cname = '';
        var aMap = new Map<string, ActionDescriptor>();
        v.forEach((av, ak, am) => {
            cname = av.ControllerName;
            aMap.set(av.Id.toLowerCase(), av);
        })
        _dic_buid_routes.set(cname.toLowerCase(), aMap)
    })
}

GetActionDescriptor方法中先检查是否build过,没有则build完成之后,根据对应规则查找相应的描述对象并返回,交给后续的中间件使用。

为什么需要ActionDescriptor对象。

请求处理函数描述对象保存了当前处理函数的一些基本信息,比如controllername的名称,所在类的名称,所在类的原型。函数的名称,请求中函数的别,函数的原型,请求方法的约束等基本信息

export class ActionDescriptor {
   public ControllerType: any;
   public ControllerTypeName: string;
   public ControllerName: string;
   public ActionType: any;
   public ActionTypeName: string;
   public ActionName: string;
   public HttpMethod: string;
   public Id: string;
   public isAuth?: boolean;
}

为什么要使用httpmethod_actionname 的格式规定id字段。

  1. 使用id字段可以方便直接hash查找缓存的处理函数方法
  2. 使用httpmethod的主要原因是我们需要支持针对单个处理函数指定它只接收某一种httpmethod方式的请求。
    好比route.post('/path',(req,res,next)=>{});就只能处理post请求。
目录
相关文章
|
2月前
|
JSON 数据格式
.net HTTP请求类封装
`HttpRequestHelper` 是一个用于简化 HTTP 请求的辅助类,支持发送 GET 和 POST 请求。它使用 `HttpClient` 发起请求,并通过 `Newtonsoft.Json` 处理 JSON 数据。示例展示了如何使用该类发送请求并处理响应。注意事项包括:简单的错误处理、需安装 `Newtonsoft.Json` 依赖,以及建议重用 `HttpClient` 实例以优化性能。
89 2
|
3月前
|
Web App开发 缓存 监控
如何解决Node框架中内存管理的挑战?
解决 Node 框架中内存管理的挑战需要综合运用多种方法,并且需要在开发过程中保持谨慎和细心,不断优化和改进代码。同时,定期进行内存管理的检查和维护也是非常重要的。
131 63
|
3月前
|
缓存 负载均衡 JavaScript
构建高效后端服务:Node.js与Express框架实践
在数字化时代的浪潮中,后端服务的重要性不言而喻。本文将通过深入浅出的方式介绍如何利用Node.js及其强大的Express框架来搭建一个高效的后端服务。我们将从零开始,逐步深入,不仅涉及基础的代码编写,更会探讨如何优化性能和处理高并发场景。无论你是后端新手还是希望提高现有技能的开发者,这篇文章都将为你提供宝贵的知识和启示。
|
3月前
|
安全 前端开发 JavaScript
Node框架的优缺点
Node 框架的优点使其在现代 Web 开发中具有重要地位,但同时也需要开发者在使用过程中注意其缺点,合理选择和应用,以充分发挥其优势,避免潜在问题的出现。随着技术的不断发展和完善,Node 框架也在不断改进和优化,以更好地适应各种应用需求。
113 47
|
3月前
|
存储 JavaScript 搜索推荐
Node框架的安装和配置方法
安装 Node 框架是进行 Node 开发的第一步,通过正确的安装和配置,可以为后续的开发工作提供良好的基础。在安装过程中,需要仔细阅读相关文档和提示,遇到问题及时解决,以确保安装顺利完成。
194 2
|
3月前
|
存储 缓存 JavaScript
node 框架
Node 框架以其独特的优势和广泛的应用场景,成为了现代 Web 开发中不可或缺的一部分。掌握 Node 框架的开发技能,对于开发者来说具有重要的意义。
158 59
|
3月前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端框架
【10月更文挑战第34天】在数字化时代,后端开发如同一座桥梁,连接着用户界面与数据处理的两端。本文将通过Node.js这一轻量级、高效的平台,带领读者领略后端框架的魅力。我们将从基础概念出发,逐步深入到实战应用,最后探讨如何通过代码示例来巩固学习成果,使读者能够在理论与实践之间架起自己的桥梁。
|
3月前
|
Web App开发 JavaScript 前端开发
构建高效后端服务:Node.js与Express框架的实践
【10月更文挑战第33天】在数字化时代的浪潮中,后端服务的效率和可靠性成为企业竞争的关键。本文将深入探讨如何利用Node.js和Express框架构建高效且易于维护的后端服务。通过实践案例和代码示例,我们将揭示这一组合如何简化开发流程、优化性能,并提升用户体验。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和实用技巧。
|
3月前
|
Web App开发 JavaScript 中间件
构建高效后端服务:Node.js与Express框架的融合之道
【10月更文挑战第31天】在追求快速、灵活和高效的后端开发领域,Node.js与Express框架的结合如同咖啡遇见了奶油——完美融合。本文将带你探索这一组合如何让后端服务搭建变得既轻松又充满乐趣,同时确保你的应用能够以光速运行。
64 0
|
3月前
|
JavaScript 中间件 API
Node.js进阶:Koa框架下的RESTful API设计与实现
【10月更文挑战第28天】本文介绍了如何在Koa框架下设计与实现RESTful API。首先概述了Koa框架的特点,接着讲解了RESTful API的设计原则,包括无状态和统一接口。最后,通过一个简单的博客系统示例,详细展示了如何使用Koa和koa-router实现常见的CRUD操作,包括获取、创建、更新和删除文章。
96 4

热门文章

最新文章