A progressive Node.js framework for building efficient and scalable server-side applications.
Nest framework TypeScript starter repository.
$ npm install
# development
$ npm run start
# watch mode
$ npm run start:dev
# production mode
$ npm run start:prod
# unit tests
$ npm run test
# e2e tests
$ npm run test:e2e
# test coverage
$ npm run test:cov
详细文档请看document/Nest.js 从零到壹系列 --- Liar出品.pdf,demo是对《Nest.js 从零到壹系列 --- Liar出品.pdf》的内容进行验证
通过上文,应该熟悉了 NestJS 的设计模式,主要就是 Controller 、 Service 、 Module 共同努力,形成了一个模块。
Controller
: 传统意义上的控制器,提供 api 接口,负责处理路由、中转、验证等一些简洁 的业务;Service
: 又称为Provider
, 是一系列服务、repo、工厂方法、helper 的总称,主要 负责处理具体的业务,如数据库的增删改查、事务、并发等逻辑代码;Module
: 负责将Controller
和Service
连接起来,类似于namespace
的概念;
使用 nest-cli 提供的指令可以快速创建文件,语法如下:
$ nest g [文件类型] [文件名] [文件目录(src目录下)]
我们输入:
$ nest g service user logical
就会发现 src 目录下多了 logical/user/ 文件夹(个人喜欢将业务逻辑相关的文件放入 logical)
现在,我们来写控制器,输入下列命令:
$ nest g controller user logical
$ nest g module user logical
CREATE TABLE `admin_user` (
`user_id` smallint(6) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
`account_name` varchar(24) NOT NULL COMMENT '用户账号',
`real_name` varchar(20) NOT NULL COMMENT '真实姓名',
`password` char(32) NOT NULL COMMENT '密码',
`password_salt` char(6) NOT NULL COMMENT '密码盐',
`mobile` varchar(15) NOT NULL DEFAULT '0' COMMENT '手机号码',
`role` tinyint(4) NOT NULL DEFAULT '3' COMMENT '用户角色:0-超级管理员|1-管理 员|2-开发&测试&运营|3-普通用户(只能查看)',
`user_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '状态:0-失效|1-有效|2-删 除',
`create_by` smallint(6) NOT NULL COMMENT '创建人ID',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_by` smallint(6) NOT NULL DEFAULT '0' COMMENT '修改人ID',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`user_id`), KEY `idx_m` (`mobile`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='后台用户表';
市面上有很多连接数据库的工具,笔者这里使用的是 Sequelize ,先安装依赖包:
$ npm i sequelize sequelize-typescript mysql2 -S
或
$ yarn add sequelize sequelize-typescript mysql2 -S
$ yarn add passport passport-jwt passport-local @nestjs/passport @nestjs/jwt -S
$ nest g service auth logical
$ nest g module auth logical
$ yarn add log4js stacktrace-js -S
$ nest g middleware logger middleware
$ nest g interceptor transform interceptor
$ nest g filter http-exception filter
$ nest g filter any-exception filter
$ nest g pipe validation pipe
$ yarn add class-validator class-transformer -S
RBAC:基于角色的权限访问控制(Role-Based Access Control),是商业系统中最常见的权限管 理技术之一。在 RBAC 中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权 限。
还记得第三篇签发 Token 的时候,有个 role 字段么?那个就是用户角色,下面我们针对 Token 的 role 字段进行展开。先新建文件:
$ nest g interceptor rbac interceptor
CREATE TABLE `commodity` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '商品ID',
`ccolumn_id` smallint(6) NOT NULL COMMENT '商品_栏目ID',
`commodity_name` varchar(10) NOT NULL COMMENT '商品_名称',
`commodity_desc` varchar(20) NOT NULL COMMENT '商品_介绍',
`market_price` decimal(7,2) NOT NULL DEFAULT '0.00' COMMENT '市场价',
`sale_money` decimal(7,2) NOT NULL DEFAULT '0.00' COMMENT '销售价',
`c_by` varchar(24) NOT NULL COMMENT '创建人',
`c_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`u_by` varchar(24) NOT NULL DEFAULT '0' COMMENT '修改人',
`u_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`),
KEY `idx_ccid` (`ccolumn_id`),
KEY `idx_cn` (`commodity_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品表';
$ nest g guard rbac guards
$ yarn add @nestjs/swagger swagger-ui-express -S
Nest is an MIT-licensed open source project. It can grow thanks to the sponsors and support by the amazing backers. If you'd like to join them, please read more here.
- Author - Kamil Myśliwiec
- Website - https://nestjs.com
- Twitter - @nestframework
Nest is MIT licensed.