快速开始
Nest是Nodejs的一个重要实现,它实现了一套类似SpringBoot的MVC框架结构,支持注释和自动注入等编程方法,使用Typescript的强类型来提供可靠的开发体验。
GraphQL的出现使得对于服务API的设计进入到了和数据库设计一样的水平,通过精心设计的schema,可以长期保证服务的稳定和可用性,同时又不会限制后台服务逻辑的升级。
此次采用Nest作为服务环境来搭建一个GraphQL服务脚手架,能够满足基本业务需求场景,方便在此基础上进行二次开发。
预设的业务需求场景包括以下内容:
- 简单查询、关联查询,增删改操作
- 循环依赖关系的Module定义
- 访问控制管理,增加角色定义,可对指定操作按角色进行控制
- 查询分页功能
- ...
依赖
Nest本身只是提供了对Apollo GraphQL Server
的封装,因此底层还是需要安装apollo-server
。
"dependencies": {
"@nestjs/common": "^7.0.1",
"@nestjs/core": "^7.0.1",
"@nestjs/graphql": "^7.3.9",
"@nestjs/platform-express": "^7.0.1",
"apollo-server": "^2.13.1",
"apollo-server-express": "^2.13.1",
"class-transformer": "^0.2.3",
"class-validator": "^0.12.2",
"graphql": "^15.0.0",
"graphql-tools": "^5.0.0",
"reflect-metadata": "^0.1.13",
"rimraf": "^3.0.2",
"rxjs": "^6.5.4"
},
"devDependencies": {
"@nestjs/cli": "^7.0.0",
"@nestjs/schematics": "^7.0.0",
"@nestjs/testing": "^7.0.1",
"@types/express": "^4.17.3",
"@types/jest": "^25.1.4",
"@types/node": "^13.9.1",
"@types/supertest": "^2.0.8",
"@typescript-eslint/eslint-plugin": "^2.23.0",
"@typescript-eslint/parser": "^2.23.0",
"eslint": "^6.8.0",
"eslint-config-prettier": "^6.10.0",
"eslint-plugin-import": "^2.20.1",
"jest": "^25.1.0",
"prettier": "^1.19.1",
"supertest": "^4.0.2",
"ts-jest": "^25.2.1",
"ts-loader": "^6.2.1",
"ts-node": "^8.6.2",
"tsconfig-paths": "^3.9.0",
"typescript": "^3.8.3"
},
示例
采用Nest官方示例进行扩展,该示例中有两个对象:author
和post
,类型定义如下:
type Author {
id: Int!
firstName: String
lastName: String
posts: [Post!]!
}
type Post {
id: Int!
title: String!
author: Author!
votes: Int
}
下载
可以在码云上获取本示例全部源码
git clone https://gitee.com/apollozhu/demo.graphql.starter.git
截图
image.png更详细的系列文章可以参考 这里
网友评论