最近写了一个node项目,主要使用到的技术有:
koa2 // nodejs 框架
koa-router // koa路由
graphql // 查询api
typescript // 强类型语言
jwt // 授权
typeorm // typescript的一个orm
mysql2 // 内容数据库
mongodb // 日志存储数据库
redis // 服务器缓存
项目结构:
conf目录(配置项目录,包含db配置、服务启动端口配置、服务启动入口文件server.ts)
release目录(编译后目录)
src(项目主要源码目录)
controllers(控制器)
core(核心扩展)
database(db连接)
entities(mysql/mongodb的数据模型)
middlewares(koa中间件)
models(其他一些数据的模型)
routes(路由)
schema(graphql的schame)
utils(辅助库目录)
app.ts项目入口文件
该项目使用了koa的路由,可以同时支持普通RESTful和graphql两种类型api
目前授权使用jwt模式,为了登出,也是用了redis辅助保存用户会话信息(醉了…)
在graphql项目中,只需要后端定义好返回数据模型,前端按照自己需要的数据去查询接口,返回无冗余数据,非常简洁方便。
graphql定义及各种各样的好处就不多说了,直接看实战结果吧。
GraphQL示例
// 查询
{
count
articles{
list{id,title}
meta{page,page_size}
}
}
// 结果
{
"data": {
"count": 3,
"articles": {
"list": [
{
"id": "594459f050bcc2abbbf5116ed301b002",
"title": "Laravel 5.6 是继 5.5 之后 Laravel 官方发布002"
},
{
"id": "594459f050bcc2abbbf5116ed301b003",
"title": "Laravel 5.6 是继 5.5 之后 Laravel 官方发布003"
},
...
],
"meta": {
"page": 1,
"total": 24
}
}
}
}
前端异步请求截图:
请求数据
返回结果
从结果看,返回的数据完全是按照自己的需要进行查询返回的
项目地址:https://github.com/xpioneer/k…
目前只是初版,还未完善整个工程项目,整体架构还需要调整,但可以跑通整个流程了!
欢迎star项目,也欢迎指正~~