nodejs graphql mysql_koa2 + graphql + typescript + jwt + typeorm的nodejs项目

这是一个使用Koa2、GraphQL、Typescript、JWT、TypeORM和MySQL构建的Node.js项目。项目还包括了mongodb作为日志存储数据库,redis用于服务器缓存。通过GraphQL,后端定义了数据模型,前端可以根据需求获取无冗余的数据。示例展示了如何查询文章列表,并展示了前端异步请求和响应的结果。
摘要由CSDN通过智能技术生成

最近写了一个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项目,也欢迎指正~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个比较具体的问题,我尽量给出详细的回答。 首先,你需要了解每个工具的作用: - Node.js: 一个基于 Chrome V8 引擎的 JavaScript 运行时,可用于构建高性能的网络应用程序。 - Midway.js: 一个基于 Egg.js 的 Serverless Node.js 框架,提供了函数计算、API 网关等 Serverless 场景下的解决方案。 - Koa: 一个基于 Node.js 平台的 Web 开发框架,旨在提供更小、更富有表现力、更健壮的 Web 应用程序。 - TypeScript: 是 JavaScript 的一个超集,可以编译成纯 JavaScript。 接下来,你可以按照以下步骤进行开发: 1. 创建一个基于 Midway.js 的应用程序: ``` $ npm init midwayjs-app jsapi ``` 2. 安装需要的依赖: ``` $ cd jsapi $ npm install koa koa-bodyparser koa-router cross-env --save $ npm install @midwayjs/koa @midwayjs/faas @midwayjs/socketio --save $ npm install typescript ts-node @types/node --save-dev ``` 3. 创建 TypeScript 配置文件 `tsconfig.json`: ``` { "extends": "@midwayjs/tsconfig/tsconfig.json", "compilerOptions": { "outDir": "dist", "rootDir": "src" }, "include": ["src"] } ``` 4. 创建一个简单的 TypeScript 控制器: ``` import { Provide, Controller, Get, Post, Body } from '@midwayjs/decorator'; import { Context } from 'koa'; @Provide() @Controller('/api') export class ApiController { @Get('/hello') async hello(ctx: Context) { ctx.body = 'Hello Midwayjs'; } @Post('/share') async share(@Body() body) { const { url } = body; // 解析分享链接 // ... // 返回解析结果 return { title, desc }; } } ``` 5. 创建 Koa 应用程序: ``` import { App, Config, Inject } from '@midwayjs/decorator'; import { ILifeCycle, IMidwayApplication } from '@midwayjs/core'; import { Application } from 'egg'; import * as bodyParser from 'koa-bodyparser'; import * as Router from 'koa-router'; @Config() export class AppConfig implements ILifeCycle { @Inject() app: IMidwayApplication; async onReady() { const app = this.app.getApplication() as Application; // 添加中间件 app.use(bodyParser()); app.use(app.get('koaRouter').routes()); // 启动应用程序 app.listen(3000, () => { console.log('Server listening on http://localhost:3000'); }); } } @App() export class ApiApplication implements ILifeCycle { @Inject() app: IMidwayApplication; async onReady() { const router = this.app.getApplicationContext().get('koaRouter') as Router; router.get('/api/hello', async (ctx) => { ctx.body = 'Hello Koa'; }); } } ``` 6. 启动应用程序: ``` $ npm run dev ``` 7. 使用 curl 或者 Postman 等工具测试 API: ``` $ curl -X GET http://localhost:3000/api/hello ``` ``` $ curl -X POST http://localhost:3000/api/share -d '{"url": "http://example.com"}' ``` 这样,一个基于 Node.js、Midway.js、KoaTypeScript 的 API 解析程序就完成了。当然,这只是一个简单的示例,你可以根据自己的需求进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值