https://github.com/xieyezi/koawithtypescript
GraphQL Wtih Koa and TypeScript
https://github.com/xieyezi/koawithtypescript
graphql koa2 typescript
Last synced: 7 months ago
JSON representation
GraphQL Wtih Koa and TypeScript
- Host: GitHub
- URL: https://github.com/xieyezi/koawithtypescript
- Owner: xieyezi
- Created: 2019-08-13T05:59:28.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2022-12-22T11:59:48.000Z (almost 3 years ago)
- Last Synced: 2025-03-07T20:51:52.675Z (7 months ago)
- Topics: graphql, koa2, typescript
- Language: TypeScript
- Homepage:
- Size: 401 KB
- Stars: 3
- Watchers: 2
- Forks: 0
- Open Issues: 11
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
KoaWithTypeScript
![]()
![]()
![]()
近来在学习node.js和TypeScript,同时也接触了Koa这个框架,循序渐进的搭了这个项目框架。此项目的主要目的是构建一个良好的项目设置和工作流,以便使用KOA和MongoDB在TypeScript中编写Node api。Koa 是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石。 通过利用 async 函数,Koa 帮你丢弃回调函数,并有力地增强错误处理。 Koa 并没有捆绑任何中间件, 而是提供了一套优雅的方法,帮助您快速而愉快地编写服务端应用程序。
token Authorization(仅限七天):
```
Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoieGlleWV6aSIsIl9pZCI6IjVkNTQxYjBhNjRlYjhlYjE3MDdiNjU1NiIsImlhdCI6MTU2NTg3NzE5NiwiZXhwIjoxNTY2NDgxOTk2fQ.CCkvk0tv_XhJN3_mPWZlKfIcsu4EtB_yh4dR7k4Nfhk
```### 已实现的接口
method | resource | description
---- | --- | ----
POST | /signup | 用户注册(密码加密)
POST | /signin | 用户登录(jwt鉴权,路由拦截,返回token)
POST | /updateuserifno | 用户更改信息
POST | /deleteuserifno | 用户注销
GET | / | 重定向至搜索宋词接口
GET | /searchSongCi | 搜索宋词接口
GET | /searchSongPoetryAuthor | 搜索宋词作者接口
GET | /searchSongPoetry | 搜索宋诗接口
GET | /searchSongPoetryAuthor | 搜索宋诗作者接口
GET | /searchTangPoetry | 搜索唐诗接口
GET | /searchTangPoetryAuthor | 搜索唐诗作者接口### 数据库表结构
name | description
---- | ---
author_song_ci | 宋词作者
ci_song | 宋词
author_song_poetry | 宋诗作者
poet_song | 宋诗
author_tang | 唐代作者
poet_tang | 唐诗
lunyu | 论语
shijing | 诗经
baijiaxing | 百家姓
huajianji | 花间集
### 具体想要实现的功能
1. 使用TypeScript进行项目的实际开发
2. 安装MongoDb数据库,
3. 利用Koa开发一个GraphQl API,
4. 使用PostMan测试我们的接口,
5. 使用mongoose操作MongoDb数据库,
6. 对前端提交的密码进行加密与解密,
7. 在Koa中使用JWT做登录鉴权,
8. 过滤用户提交的数据,防止XSS攻击,
9. 使用mocha进行同步、异步和接口的单元测试,
10. 单元测试覆盖率
11. 使用koa-swagger-decorator生成API文档### 已实现的功能
1. 使用mongoose对数据库进行基本的操作;
2. 获取用户输入的字段,对搜索关键词进行查询并封装结果返回给用户;
3. 进入根路径的时候默认重定向至search接口,默认搜索关键词为“晏殊”;
4. 根据MVC模式搭建数据结构和项目结构;
5. 实现了古诗和作者的搜索接口(2019-08-05)
6. 实现了用户的注册、更改信息、注销功能,剩下登录功能(2019-08-06)
7. 实现了用户注册时密码的加密功能,以及登录验证功能(2019-08-07 12:34:29
8. 利用TypeScript 对项目完成了重构### 目标
通过Koa+MongoDB搭建一个古诗词的 GraphQl API,然后用flutter 开发一个关于古诗词学习的APP,循序渐进!!### 安装前提
1. Node.js v7.6.0及其以上版本
2. 全局安装TypeScript : `npm install -g typescript`### 快速开始
* clone 项目
`git clone https://github.com/xieyezi/KoaWithTypeScript.git `* 安装依赖
```
cd
npm install
```
* 运行和打包
```
npm run start
npm run build
```
### 命令预览Npm Script | description
---- | ---
npm run start | 和'npm run serve' 一样,运行项目
npm run serve | 运行项目
npm run watch | 利用Nodemon实时监听项目
npm run bulid | 打包项目### TypeScript 配置文件
```
{
"compilerOptions": {
/* Basic Options */
"target": "ES2017", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */
"module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */
"sourceMap": true, /* Generates corresponding '.map' file. */
"outDir": "./dist", /* Redirect output structure to the directory. */
"moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
"baseUrl": ".", /* Base directory to resolve non-absolute module names. */
"esModuleInterop":true,
"experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */
},
"include": [
"./src/**/*"
]
}
```
### 用到的中间件(middleware)packageName | description
---- | ---
koa-router | 实现接口路由
koa-bodyparser | 解析post请求数据
bcrypt | 对用户提交的密码进行“加盐”加密
koa-jwt | 用户登录鉴权(路由拦截)
jsonwebtoken | 生成token
CORS | 跨域处理
koa-swagger-decorator | 生成API文档
mongoose | 操作mongoDB数据库### 问题总结
1. 在读文件的时候,出现了内存泄漏的情况,解决方法:
```
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "tsc && node --max-old-space-size=8192 dist/app.js",
"watch-server": "nodemon --watch 'src/**/*' -e ts,tsx --exec 'ts-node' ./src/app.ts"
}
```
将node --max-old-space-size=8192 设置为8G即可.