讲一个我预想的 nodejs 服务框架(NodeAction)

写在前面

虽然已经有很多优秀的服务框架了,比如 Express.js、Koa 等,但是自己还是有些多这方面的构想,比如 express,接口都是通过 app. 来指定,总跟我的预想不太合,其实我更想将不同接口放在不同的一个类或者方法中(不知道 express 有没有,因为网上都是 app. 这么写的,也没深入了解),而且我比较喜欢面向对象的方式,主要还是自己想摸索一下开发一个属于自己的服务框架😁

代码

已经写了一部分,但是封装的还有很多不足,先上目前的代码:

index.js

const {nodeAction, Action, actionInterceptor} = require("@jl15988/node-action");

const userInfo = {
    "id": 1,
    "username": "admin",
    "nickname": "管理员",
    "email": "aoteman@126.com",
    "mobile": "15612345678",
    "sex": 1,
    "avatar": null,
    "loginIp": "192.168.0.8",
    "loginDate": 1731468594935,
    "createTime": 1609837427000,
    "roles": [
        {
            "id": 1,
            "name": "超级管理员"
        },
        {
            "id": 2,
            "name": "普通角色"
        }
    ],
    "dept": null,
    "posts": [
        {
            "id": 1,
            "name": "董事长"
        }
    ],
    "socialUsers": []
}

// 创建用户控制器
const UserAction = new Action('UserAction', (action) => {

    // 设置 user action 的路由前缀
    action.mapping('/user')

    // 获取用户信息接口
    action.get('/get', (requestInfo) => {
        // 请求参数
        console.log(requestInfo.params)
        // 返回用户信息
        return userInfo
    })

    // 修改用户信息接口
    action.post('/update', (requestInfo) => {
        // 请求体
        console.log(requestInfo.body)
        // 返回修改结果
        return {
            code: 200,
            message: '修改成功'
        }
    })
})

const interceptors = [{
    // 拦截器名
    name: 'onLoad',
    // 执行排序,如果重复则按添加的顺序,没有顺序的优先级最低
    sort: 0,
    // 解析路由之前的拦截器
    load: (requestInfo, response) => {
        return true
    },
    // 执行路由处理方法之前的拦截器
    before: (requestInfo, response, routeInfo) => {
        return true
    },
    // 执行路由处理方法之后的拦截器
    after: (requestInfo, response, routeInfo, handleResult) => {
        return true
    }
}]

// 统一异常处理器
nodeAction.actionErrorHandler = (request, response, error) => {
    console.error(error)
}

// 统一返回数据处理器
nodeAction.actionResultHandler = (request, response, res) => {
    console.log(res)
    return res
}

nodeAction
    // 控制器
    .actions([UserAction])
    // 拦截器
    .interceptors(interceptors)
    // 端口号
    .port(3000)
    // 启动
    .start()

执行 node src/index.js 启动

浏览器访问:http://{本地地址}:3000/user/get

说明

1. action 控制器

如上述代码示例,有一个 Action 类,用于构建控制器。

  • 控制器接收 name 和一个方法,分别是该控制器的名称和处理函数,处理函数中用于指定接口和处理方法;
  • 处理方法会有一个当前控制器本身的实例参数,可用于指定 mapping、get、post、put、delete 等;
  • mapping 用于指定该控制器下所有接口的统一前缀路由;
  • get等接口接收路由和处理函数,处理函数会有 requestInfo 请求信息和 response 响应两个参数,用于拿取请求信息和处理响应(在新版本中 requestInfo 和 response 被归到了一个参数中[actionParam],同时包含请求路径、请求URL、请求方法、请求参数、请求体、转发、获取静态资源等参数和方法)。

2. interceptor 拦截器

在新版本中,nodeAction.interceptors 接收的是 ActionInterceptor 数组,而不是 json 数组了,也是用于规范拦截器的定义。拦截器接收 load、before、after 处理函数用于拦截解析路由之前、执行路由处理方法之前、执行路由处理方法之后。通过返回 true 或 false 来指定不拦截或者拦截。

3. handler 处理器

目前有两种处理器

  • actionErrorHandler 请求异常处理器。由于统一处理全局异常的处理器,有 request(请求)、response(响应)、error(异常)三个参数;
  • actionResultHandler 响应结果处理器。用于统一处理全局响应结果的处理器,有request(请求)、response(响应)、res(结果)三个参数。

项目地址

https://gitee.com/jl15988/node-action

结尾

以上就是目前已经开发出来的东西,很多东西都有待优化,有过你有好的建议或想法,欢迎提议,感谢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/944441.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

探索Flink动态CEP:杭州银行的实战案例

摘要:本文撰写自杭州银行大数据工程师唐占峰、欧阳武林老师。将介绍 Flink 动态 CEP的定义与核心概念、应用场景、并深入探讨其技术实现并介绍使用方式。主要分为以下几个内容: Flink动态CEP简介 Flink动态CEP的应用场景 Flink动态CEP的技术实现 Flin…

STM32F103RCT6学习之三:串口

1.串口基础 2.串口发送 1)基本配置 注意:实现串口通信功能需在keil中设置打开Use Micro LIB,才能通过串口助手观察到串口信息 2)编辑代码 int main(void) {/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration-------------…

Python中构建终端应用界面利器——Blessed模块

在现代开发中,命令行应用已经不再仅仅是一个简单的文本输入输出工具。随着需求的复杂化和用户体验的重视,终端界面也逐渐成为一个不可忽视的设计环节。 如果你曾经尝试过开发终端UI,可能对传统的 print() 或者 input() 函数感到不满足&#…

OpenHarmony-5.PM 子系统(2)

电池服务组件OpenHarmony-4.1-Release 1.电池服务组件 Battery Manager 提供了电池信息查询的接口,同时开发者也可以通过公共事件监听电池状态和充放电状态的变化。电池服务组件提供如下功能: 电池信息查询。充放电状态查询。关机充电。 电池服务组件架…

Java 网络原理 ①-IO多路复用 || 自定义协议 || XML || JSON

这里是Themberfue 在学习完简单的网络编程后,我们将更加深入网络的学习——HTTP协议、TCP协议、UDP协议、IP协议........... IO多路复用 ✨在上一节基于 TCP 协议 编写应用层代码时,我们通过一个线程处理连接的申请,随后通过多线程或者线程…

基于规则的系统架构:理论与实践

在当今信息化快速发展的时代,企业面临着日益复杂和多变的市场环境,传统的静态系统架构已难以满足快速响应业务变化的需求。基于规则的系统架构(Rule-Based System Architecture, RBSA)作为一种灵活、可扩展的架构模式,…

记一个itertools排列组合和列表随机排序的例子

朋友不知道哪里弄来了一长串单词列表,一定要搞个单词不重复的组合。那么这个时候我们就可以想到读书时所学的排列组合知识了,而这个在Python中可以怎么实现呢?我记录如下: 使用itertools模块实现排列组合 在 Python 中&#xff…

从0入门自主空中机器人-4-【PX4与Gazebo入门】

前言: 从上一篇的文章 从0入门自主空中机器人-3-【环境与常用软件安装】 | MGodmonkeyの世界 中我们的机载电脑已经安装了系统和常用的软件,这一篇文章中我们入门一下无人机常用的开源飞控PX4,以及ROS中无人机的仿真 1. PX4的安装 1.1 PX4固件代码的下载…

搭建vue项目

一、环境准备 1、安装node node官网:https://nodejs.org/zh-cn 1.1、打开官网,选择“下载”。 1.2、选择版本号,选择系统,根据需要自行选择,上面是命令安装方式,下载是下载安装包。 1.3、检查node安装…

深度学习笔记(5)——目标检测和图像分割

目标检测与图像分割 语义分割:如果没有语义信息,很难正确分类每个像素 解决方案:感知像素周围的语义,帮助正确分类像素 滑窗计算:计算非常低效,图像块的重叠部分会被重复计算很多次 解决方案:转向全卷积 全卷积问题:分类模型会大幅降低特征的分辨率,难以满足分割所需的高分辨…

go语言的成神之路-筑基篇-gin常用功能

第一节-gin参数绑定 目录 第一节-?gin参数绑定 ShouldBind简要概述 功能: 使用场景: 可能的错误: 实例代码 效果展示 第二节-gin文件上传 选择要上传的文件 选择要上传的文件。 效果展示? 代码部分 第三节-gin请求重定向 第…

【Leecode】Leecode刷题之路第93天之复原IP地址

题目出处 93-复原IP地址-题目描述 题目描述 个人解法 思路: todo代码示例:(Java) todo复杂度分析 todo官方解法 93-复原IP地址-官方解法 方法1:回溯 思路: 代码示例:(Java&…

【新方法】通过清华镜像源加速 PyTorch GPU 2.5安装及 CUDA 版本选择指南

下面详细介绍所提到的两条命令,它们的作用及如何在你的 Python 环境中加速 PyTorch 等库的安装。 1. 设置清华镜像源 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple这条命令的作用是将 pip (Python 的包管理工具&#xf…

CES Asia 2025的低空经济展区有哪些亮点?

CES Asia 2025(赛逸展)的低空经济展区有以下亮点: • 前沿科技产品展示: 多款新型无人机将亮相,如固定翼无人机和系留无人机的最新型号,其在监测、救援和货物运输等方面功能强大。此外,还有可能…

python数据分析之爬虫基础:selenium详细讲解

目录 1、selenium介绍 2、selenium的作用: 3、配置浏览器驱动环境及selenium安装 4、selenium基本语法 4.1、selenium元素的定位 4.2、selenium元素的信息 4.3、selenium元素的交互 5、Phantomjs介绍 6、chrome handless模式 1、selenium介绍 (1…

Python学生管理系统(MySQL)

上篇文章介绍的Python学生管理系统GUI有不少同学觉得不错来找博主要源码,也有同学提到老师要增加数据库管理数据的功能,本篇文章就来介绍下python操作数据库,同时也对上次分享的学生管理系统进行了改进了,增加了数据库&#xff0c…

二,Python常用库(共16个)

二,常用库(共15个 二,Python常用库(共15个)1,os模块2,json模块2.1 猴子补丁S 3,random模块4,string模块5,异常处理5.1 错误类型5.1 逻辑错误两种处理方式5.1.1 错误时可以预知的5.1.2 错误时不可…

Linux第99步_Linux之点亮LCD

主要学习如何在Linux开发板点亮屏,以及modetest命令的实现。 很多人踩坑,我也是一样。关键是踩坑后还是实现不了,这样的人确实很多,从群里可以知道。也许其他人没有遇到这个问题,我想是他运气好。 1、修改设备树 1)、…

解密MQTT协议:从QOS到消息传递的全方位解析

1、QoS介绍 1.1、QoS简介 使用MQTT协议的设备大部分都是运行在网络受限的环境下,而只依靠底层的TCP传输协议,并不 能完全保证消息的可靠到达。 MQTT提供了QoS机制,其核心是设计了多种消息交互机制来提供不同的服务质量,来满足…

网络安全 | 5G网络安全:未来无线通信的风险与对策

网络安全 | 5G网络安全:未来无线通信的风险与对策 一、前言二、5G 网络的技术特点2.1 超高速率与低延迟2.2 大容量连接与网络切片 三、5G 网络面临的安全风险3.1 网络架构安全风险3.2 设备终端安全风险3.3 应用场景安全风险3.4 用户隐私安全风险 四、5G 网络安全对策…