koa连接mysql项目例子

本文介绍了如何使用Koa2、Koa-router和MySQL搭建项目,重点阐述了项目的目录结构和三层架构:controller、services和route。controller层负责与数据库交互,编写SQL;services层传递数据并调用controller方法;route层定义路由。通过将路由定义分散到单独的文件,简化了管理。项目实现了从接收参数、执行SQL到返回结果的完整流程。
摘要由CSDN通过智能技术生成

koa路由层封装

typescript例子

koa面向对象式编程(仿egg.js)

最近做了一个koa的例子,封装了一些controller层和services层

技术栈采用的是koa2 + koa-router + mysql

  • controller : 负责直接和数据库进行连接(写sql, 对参数进行处理)

  • services: 负责传输数据

  • route: 负责定义路面的路由

简单看一下项目的目录结构

 

这便是其中最重要的三层结构

入口文件是index.js,我们简单来看一下源码

var Koa=require('koa');
var path=require('path')
var bodyParser = require('koa-bodyparser');
var session = require('koa-session-minimal');
var MysqlStore = require('koa-mysql-session');
var config = require('./config/default.js');
var koaStatic = require('koa-static')
var app=new Koa()
const routers = require('./routes/index')
​
// session存储配置
const sessionMysqlConfig= {
  user: config.database.USERNAME,
  password: config.database.PASSWORD,
  database: config.database.DATABASE,
  host: config.database.HOST,
}
​
// 配置session中间件
app.use(session({
  key: 'USER_SID',
  store: new MysqlStore(sessionMysqlConfig)
}))
​
// 配置跨域
app.use(async (ctx, next) => {
  ctx.set('Access-Control-Allow-Headers', 'Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With')
  ctx.set('Access-Control-Allow-Origin', 'http://localhost:9000');
  ctx.set('Access-Control-Allow-Methods', 'PUT,DELETE,POST,GET');
  ctx.set('Access-Control-Allow-Credentials', true);
  ctx.set('Access-Control-Max-Age', 3600 * 24);
  await next();
});
// 配置静态资源加载中间件
app.use(koaStatic(
  path.join(__dirname , './public')
))
​
// 使用表单解析中间件
app.use(bodyParser())
​
// 使用新建的路由文件
app.use(routers.routes()).use(routers.allowedMethods())
​
// 监听在1200
app.listen(config.port)
​
console.log(`listening on port ${config.port}`)
​

中间读取了数据库配置和进行跨域的设置以及表单解析,其中路由定义是在引用router

我们来看一下router的定义

​
​
const router = require('koa-router')()
// 配置所有的routes文件
const routes = (config => {
    return config.reduce((copy, name) => {
    // 这里是请求对应的路由模块,获得对应的对象
    const obj = require(`./${name}`)
    const newArr = Object.keys(obj).reduce((total, each) => {
      let item = { path: `/api/${name}/${each}`, method: obj[each].method, action: each, service: name }
      total.push(item)
      return total
    }, [])
    copy = copy.concat(newArr)
      return copy
    }, [])
})([
  'admin',
  'user&#
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值