在大多数项目中,必须需要用户,角色,权限等的概念和功能。其系统的基础。
Ruo Yi的许可管理系统给了我很多灵感。我计划使用我熟悉的JS/TS构建背景管理系统。它的权威模块想法从鲁伊的权限管理部分借用,并写下博客以记录经验。
由于我计划创建项目并且过程很长,因此我计划将整个项目分为第2-3节。本文是第一部分,主要介绍基本服务的构建,包括构建KOA2 + TS后端环境和中间的常见中间体。
如果文章中有错误或优化,我希望能启发我
创建一个新的SRC文件夹,在src root目录中创建一个新的app.ts文件,app.ts是整个项目的入口
修改tsconfig.json
立即在app.ts中的KOA服务器
跑步
如果成功,命令行将打印
我们可以访问http:// localhost:9000 // localhost
目前,Hello World应该显示在页面上
每次我们需要执行和运行时,都太麻烦了。我们可以修改软件包。json并添加dev命令
然后每次运行npm运行开发
但这仍然很麻烦,我们希望能自动监视保存并刷新文件。这可以通过Nodemon和TS节点来实现
前者可以监视文件的更改并自动重新启动服务,后者可以直接运行TS文件
安装Nodemon
修改package.json的dev命令
为了控制代码的样式和质量,我们可以介绍ESLINT和更漂亮
在根目录中创建.eslintrc.js
在根目录中创建.prettierrc和.ditorConfig
编辑VSCODE配置文件设置。JSON,在末尾添加以下行
安装vscode插头-In Prettier -Code Formatter
修改src/app.ts,将以下代码添加到末尾
目前,ESLINT将提示2个警告和1个错误,并且该代码具有3个不符合我们设置的规格
当我们ctrl+s保存文件时,您会发现编辑器修改代码以修改代码
违规性是固定的,这意味着我们的配置成功了
要在形式环境中部署项目,我们不再需要监视文件修改,而是直接编译文件。因此,我们添加了一个构建命令
如果项目部署窗口环境,则可以直接停止CTRL+C,但是如果在Linux环境中重新启动项目更麻烦,则可以考虑使用PM2来管理节点服务
为了区分正式的环境和开发环境,我们可以使用交叉ENV添加环境变量
修改开发和构建命令
修改src/app.ts
我们可以看到控制台印刷的开发。
在开发过程中,当我们遇到错误时,我们可以使用编辑器的断点调试函数。我们可以无需修改代码而暂停和研究生调试,从而可以大大提高发展经验和效率效率
目前,该项目将以调试模式开始。单击需要中断的代码代码的左侧。
此时,基本的环境构建基本上已经完成
中间零件是一种包装方法,用于处理HTTP请求的功能
如果将HTTP请求隐喻为水运输管道,则中间件是管道上的仪器,阀门和其他处理设备
中间部分主要有3个核心概念:请求请求,响应响应和下一个功能
请求和响应是请求上下文信息上下文,下一个功能用于控制状态。
如果未设置请求响应,则此请求将返回404
如果请求,输入某个中间件后,则仅在执行下一个功能时,请求将继续执行下一个中间件。如果未执行下一个函数,并且设置了响应的状态代码和返回值,则请求将结束请求。,不再继续执行以下中间件,而是直接将响应返回到前端。
KOA使用使用方法加载中间件
值得注意的是,中间件首先是执行的
下面我们介绍了一些常用的中间件,并开发一些中间件
对于清除模块,我们在SRC目录中创建一个核心文件夹,用户存储核心静态类
在SRC/Core目录中,为初始化的中间件创建了新的init.ts
在HTTP请求中,消息的主体(即,主体参数)在网络中传输了二进制数据,为了优化速度,内容通常会压缩内容的编码,例如Gzip
KOA-BodyParser中间件将处理邮政请求的请求消息,并将主体安装在ctx.request.body中的JSON中
服务器侧路由,即不同路径的HTTP请求的相应和处理
但是这样做,所有处理都在一起,并且在实际开发中不合适。我们希望将不同的请求处理功能放在不同的目录和文件中,并且可以轻松设置请求路径和请求方法
KOA-ROUTER是KOA的路由中间件。它可以匹配请求的URL和方法(例如:获取,发布,放置,删除等)与相应的响应程序或页面
在SRC下创建一个新的目录API,在API下创建一个新的目录V1,指示接口的版本,当前版本将接口的当前版本放置在V1目录中
在v1下创建一个新的文件text.ts,在此文件中,我们创建一个路由实例
然后在init中加载此路由实例
目前,我们同意在SRC/API目录中,仅存储HTTP请求路由文件,因此手动介绍太麻烦了。我们希望能自动穿越SRC/API目录并自动加载所有路由处理
在SRC目录中创建一个新的公共目录,以存储公共文件,在COONSE下创建一个新的Utils目录,以存储工具函数,然后在UTITS下创建一个新的UTITS.TS
让我们在utils中的utils中写下所有文件的方法。
然后致电初始化
此时,将自动调用SRC/API目录中的路由,但是在构建后,目录将更改为/disti/api/。我们需要
其他需要使用绝对路径的地方将有此问题,因此我们可以创建一个公共变量,这有利于重复使用
在src下创建目录配置,并在配置下创建config.ts以存储配置和公共变量
修改app.ts
修改src/api/v1/test.ts
修改src/core/init.ts
KOA可以使用ctx.throw()方法或创建错误实例并使用投掷关键字直接丢弃错误。错误将中断程序的执行。
如果通过try ... catch捕获错误,一旦执行程序,将执行捕获的语句,然后执行执行。
最终的打印结果是
CTX的当前上下文是NEXT的含义具有一种回调函数,将执行下一步
因此,在第一个中间件中,使用尝试...将下一步的捕捉以将来监视所有中间件中的错误。
如果我们自定义一些“错误”,并且当我们遇到不同的“错误”时,就会处理响应,那么此中间件不仅可以捕获异常,而且还可以使接口响应成为统一的出口。
在SRC/Core Directory中,构建一个新的HTTPException.ts来存储不同的HTTP错误类型
在请求过程中,我们期望有一些情况,例如
我们可以丢下错误,截距进行处理,并返回相应的状态代码和数据。
如果是意外错误,请处理异常治疗并打印日志
在SRC目录中创建一个新的Directory MiddleWares,用户存储自定义中间件,然后在MiddleWares目录中创建一个新的CatchError.ts,以开发错误拦截中间件
然后在init中使用中间件
我们修改src/api/v1/test.ts接口,并根据不同的要求进行不同的处理
打开浏览器访问http:// localhost:9000/api/v1/test,您可以看到接口返回
{“ msg”:“ unobstructed”,“ errorcode”:10002,“ data”:{}}
这样,当所有错误和HTTP请求响应都集中在CatchError中间件中时,将根据我们设置的HTTPException返回相应的数据。
除了控制Taihe返回客户端的错误信息外,我们还需要一个日志系统来记录固定目录中的错误,这很方便将来查看
在src/common下创建一个文件夹lib,然后创建一个新的logs.ts来存储日志配置。我们的日志系统主要取决于log4js。
根据SRC创建新的服务器目录,用户存储单身和公共业务
在src/server下,创建一个新的日志目录,用户存储与日志相关的日志
在src/server/logs下,创建新的logsconfing.ts,用户存储log4js配置
有许多log4js配置项。这里
在src/server/logs目录中,创建一个新的logger.ts来获取logger。
由于我们的配置是日志目录中的新日期日志,并且不需要在GIT版本中记录日志文件,因此我们不会手动创建日志目录。当代码运行时,由于日志目录不存在,将报告错误。服务开始时,您需要确定是否存在日志目录。
除了错误信息外,我们还希望错误是要调用哪个接口生成,因此我们还需要获取上下文信息上下文,即请求信息和响应信息。上下文非常频繁。类型集成
在SRC/Common目录中,创建了新的打字目录来存储公共说明文件
在SRC/COMMON/TYPING下,创建一个新型号D.TS
然后在src/server/logs目录中,创建用于包装特定业务的index.ts
然后在Catcherror中间件中,我们介绍了记录器
当服务重新启动时,我们可以看到该项目将自动生成日志文件夹和日期。-2022-05-05-13.log(名称是当前时间)在root Directory.-2022查看日志文件日期。-05-05-13。日志已更新
在src/server下,创建一个新的mySQL目录,并在mysql下创建一个新的mysqlconfing.ts来存储配置文件
在src/server/mysql下创建一个新pool.ts,创建一个mysql连接池实例
在src/server/mysql下创建一个index.ts,用于包装常用方法和公共业务
其他相关文档修改:
安装时间来处理时间
添加src/utils下的date.ts来存储用于存储时间的工具功能
MySQL中存储的字段通常是以下行的存储,JS代码通常由驼峰类型变量命名,因此您需要在数据上进行一层转换
在src/server下,创建一个新的redis目录,在redis下创建一个新的redisconfing.ts,然后使用它存储配置文件
在src/server/redis下创建一个新的redis.ts,创建一个redis实例
在src/server/redis下创建一个index.ts,用于封装常见方法和公共业务
本文主要介绍了KOA2+TS后端项目的环境构建和常见的中间部分。下一篇文章将根据本文介绍基本服务和业务的开发,该文章主要包括日志系统和权限系统的构建。
原始:https://juejin.cn/post/70948308637278216