最近写了一个node项目,主要使用到的技术有:

koa2 // nodejs 框架

koa-router // koa路由

graphql // 查询api

typescript // 强类型语言

jwt // 授权

typeorm // typescript的一个orm

mysql2 // 内容数据库

mongodb // 日志存储数据库

redis // 服务器缓存

项目结构:

6dde9495cd51d00a715ee124d7245956.png

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

}

}

}

}

前端异步请求截图:

请求数据

683b10cf69107a0e31405dc65e71e200.png

返回结果

bf1616a4c7dc32a48a4532bc59be67c5.png

从结果看,返回的数据完全是按照自己的需要进行查询返回的

目前只是初版,还未完善整个工程项目,整体架构还需要调整,但可以跑通整个流程了!

欢迎star项目,也欢迎指正~~

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐