阅读本文前,需要提前阅读前置内容:
一、Midway 增删改查
二、Midway 增删改查的封装及工具类
三、Midway 接口安全认证
四、Midway 集成 Swagger 以及支持JWT bearer
五、Midway 中环境变量的使用
midway是阿里巴巴开源的,基于TypeScript语言开发的Nodejs后端框架。
本教程指导大家从0开始搭建一个midway项目。
其遵循遵循两种编程范式
- 面向对象(OOP + Class + IoC);
- 函数式(FP + Function + Hooks);
谁较容易上手学习
- 懂Nodejs技术的前端开发;
- 会TypeScript的后端开发;
在这里你可以掌握度如下知识
- 面向对象的开发体验;
- 增删改查及基类封装;
- 数据库操作;
- 缓存操作;
- 用户安全认证及访问安全控制;
- JWT访问凭证;
- 分布式访问状态管理;
- 密码加解密;
- 统一返回结果封装;
- 统一异常管理;
- Snowflake主键生成;
- Swagger集成及支持访问认证;
- 环境变量的使用;
- Docker镜像构建;
- Serverless发布;
本项目源码
https://github.com/bestaone/midway-boot
LIVE DEMO
http://midway-boot.hiauth.cn/swagger-ui/index.html
环境准备
- Nodejs 12+
- Npm 8+
- MySql 5+
- Redis
开发工具
我们这里使用 IntelliJ IDEA
下载地址:https://www.jetbrains.com/zh-cn/idea/download
安装数据库
略…
安装Redis
略…
第一个midway项目
初始化创建
>npm init midway
- 执行命令后,需要选择模板,标准项目需要选择:koa-v3;
- 项目名可以自定义(我这里设置为midway-boot);
启动
>cd midway-boot
>npm run dev
启动后浏览器访问:http://127.0.0.1:7001
调整ESLint配置
为了保证代码分隔统一,我们调整下ESLint配置
// .prettierrc.js
module.exports = {
...require('mwts/.prettierrc.json'),
endOfLine: "lf", // 换行符使用 lf
printWidth: 120, // 一行最多 120 字符
proseWrap: "preserve", // 使用默认的折行标准
semi: true, // 行尾需要有分号
}
在windows中代码的首行、尾行不能有空行,否则ESLint提示格式错误,可能是bug。
项目结构介绍
├─src # 源码目录
│ ├─config # 配置
│ ├─controller # 控制器
│ ├─entity # 数据对象模型
│ ├─filter # 过滤器
│ ├─middleware # 中间件
│ ├─service # 服务类
│ ├─configurations.ts # 服务生命周期管理及配置
│ └─interface.ts # 接口定义
├─test # 测试类目录
├─bootstrap.js # 启动入口
├─package.json # 包管理配置
├─tsconfig.json # TypeScript 编译配置文件
增删改查
ORM组件:TypeORM
TypeORM是Object Relation Mapping工具,提供的数据库操作能力。
安装依赖
>npm i @midwayjs/orm@3 typeorm --save
安装完后package.json
文件中会多出如下配置
{
"dependencies": {
"@midwayjs/orm": "^3.3.6",
"typeorm": "^0.3.7"
}
}
引入组件
在src/configuration.ts
中引入 orm 组件
// configuration.ts
import {
Configuration, App } from '@midwayjs/decorator';
import * as koa from '@midwayjs/koa';
import * as validate from '@midwayjs/validate';
import * as info from '@midwayjs/info';
import {
join } from 'path';
import {
ReportMiddleware } from './middleware/report.middleware';
import * as orm from '@midwayjs/orm';
@Configuration({
imports: [
orm, // 引入orm组件
koa,
validate,
{
component: info,
enabledEnvironment: ['local'],
},
],
importConfigs: [join(__dirname, './config')],
})
export class ContainerLifeCycle {
@App()
app: koa.Application;
async onReady() {
this.app.useMiddleware([ReportMiddleware]);
}
}
添加数据库配置
修改配置src/config/config.default.ts
// src/config/config.default.ts
import {
MidwayConfig } from '@midwayjs/core';
export default {
keys: '1657707214114_9253',
koa: {
port: