koa2教程【mysql,路由,跨域,静态服务】

做人有原则,就什么都不怕

没有受过伤的人,才会讥笑别人身上的伤痕! ---《罗密欧与朱丽叶》

本文主要讲koa项目的建立,数据库连接配置,静态资源服务,路由管理。读完3分钟,也可做练手的教程。


先看项目目录

koa2项目目录

lib —— 数据库
node_modules —— 依赖库
routers —— 路由
static ——静态资源
app.js —— 项目入口文件
package-lock.json —— webpack配置文件


简单的说下项目各部组合思想

1:app启动页,项目的入口,兼顾整个项目。因此,依赖,配置,都在这里
2:lib数据库管理,后端工程师的核心工作内容就是数据,增删改查。(每个功能的方法都不一样,都写在这里,所以需要分离,后期项目庞大,各个功能都要区分单独的文件管理)
3:静态资源,为什么?后端,前端的的react或vue都是静态的资源,打包后放在这里,关闭跨域访问,数据更安全。

中小形的项目就这样的结构了。或许,应该足够了。结下来,逐一分析。

一: app.js 项目入口

具体的怎么用,代码上都有,
const Koa = require('koa')
const bodyParser  = require('koa-bodyparser')   //上下文解析
const Router = require('koa-router')    //路由
const static = require('koa-static')    //静态资源服务
const path = require('path')
const cors = require('koa-cors')       //跨域访问组件

const app = new Koa()

// 配置静态资源文件
const  staticPath = './static'
app.use(static(
    path.join( __dirname, staticPath)
))

// 允许跨域访问
app.use(cors())

// body解析
app.use(bodyParser())

app.use(require('./routers/index').routes())

app.listen(3000)
console.log("启动成功")

各个中间件的解释:
  • 所有引入的资源都要在事先使用npm安装好
  • koa: 项目的核心组件
  • koa-bodyparser: 用来解析body的中间件,假如你post来传递表单,json数据,或者上传文件,在koa中是不容易获取的,通过koa-bodyparser解析之后,在koa中this.body就能直接获取到数据。
  • koa-router:koa的路由中间间。
  • koa-static : koa的静态资源服务中间件
  • path: 路径获取中间件
  • koa-cors : 允许跨域请求的中间间,假设node的服务在3000端口,react的服务在3001。react获取node的json时候。跨域了。搞jsonp就麻烦多了。线上的时候根本用不到。

配置好各项中间件,设置好启动端口,蓄势待发!!!


二:(router/index.js) 路由管理

不啰嗦,看代码。都有注释

const router  =require('koa-router')();   //路由
const userModel = require('../lib/mysql')   //数据库方法

router.get('/',async(ctx,next) => {
    ctx.redirect('/index')
})

router.get('/index',async(ctx,next) => {
    let html = `
        <h1> 老子吃火锅,你吃火锅底料 --gai </h1>
    `
    ctx.body = html
})

router.get('/api',async(ctx,next) => {
    let  resd = ''
    await userModel.findAllPost()
        .then(result => {
            resd = JSON.parse(JSON.stringify(result))
            // console.log(resd)
        })
    ctx.body = resd
})

module.exports= router
各个中间件的解释
  • 引入路由组件,注意,是执行函数的的。加括号
  • 数据库引入,引入增删改查的方法库,后面数据管理还有讲
  • router.get() 路由中间件提供的方法,koa2的的最大的便捷之处就是使用es6的async异步写法。
  • 请求体,响应体。要这么去理解,router.get('/index')这是请求体,koa去识别出来后,便执行响应体。
  • 响应体 let html='' 响应的内容,后面复杂的编程时,获取的内容是从数据库加工处理后的内容。
  • ctx.body = html 响应体返回的内容 【看下面的代码】
router.get('/index',async(ctx,next) => {
   let html = `
       <h1> 老子吃火锅,你吃火锅底料 --gai </h1>
   `
   ctx.body = html
})

全都返回json,让前端工程师更忙碌吧,熟悉mysql,开发之前架构设计好,能省很大的力 0.。0


三:lin 数据库管理,配置

两部分:1配置(config.js), 2,方法(mysql.js)

// 数据库配置
const config = {
    port: 3000,
    database:{
        DATABASE:'111',   //数据库
        USERNAME:'hez',    //用户
        PASSWORD:'aS62681***',  //密码
        PORT:'3306',    //端口
        HOST:'39.106.12.86'   //网址ip
    }
}

module.exports = config

因为线上的,我注释密码了

const mysql = require('mysql')
const config = require('./default')

var pool = mysql.createPool({
    host:config.database.HOST,
    user:config.database.USERNAME,
    password:config.database.PASSWORD,
    database:config.database.DATABASE
});

let query = function( sql, values ) {

    return new Promise(( resolve, reject ) => {
        pool.getConnection(function(err, connection) {
            if (err) {
                resolve( err )
            } else {
                connection.query(sql, values, ( err, rows) => {

                    if ( err ) {
                        reject( err )
                    } else {
                        resolve( rows )
                    }
                    connection.release()
                })
            }
        })
    })

}

// 查询t1数据库
let findAllPost = function () {
    let  _sql = `
        SELECT * FROM hez1
    `
    return query(_sql)
}


module.exports={
    findAllPost
}

害怕,我懒!!!

  • 需要配置项,因为有线上,线下,各重版本。所以把配置项独立出来会好方便很多
  • 再多说一次,后端工作的核心就是数据,真诀,增删改查
  • mysql写的好,处理起数据来还是很省心的。使用js函数将sql方法写好封装起。暴露出来再各个组件,模块中使用。
// 查询t1数据库
let findAllPost = function () {
    let  _sql = `
        SELECT * FROM hez1
    `
    return query(_sql)
}

四:运行项目

当控制台返回数据的时候,表示成功

控制台的打印日志
  • 页面路由进入/api,返回数据,表示成功。
  • 当然,也能数据库忽略,页面返回 老子吃火锅,你吃火锅底料--gai 也表示成功

其实,项目要git,提交到代码管理平台。大家一起开发,各人负责一块业务的开发,之后我会再写一篇git的文章,平台大概是码云,github。


项目代码地址,下一篇文章是在linx服务器(CentOS 7.3系统)部署koa项目。内容有koa2服务建立,nginx代理,mysql安装,用户管理,系统常用指令。

js全栈工程师必看的网址 我的个人网址,(还在建设中...)

关注我吧,因为写react,koa,mysql,vue,reactNative等api,及技巧。不信关注我的微信或qq(626815494)看看。


扫一扫,添加作者微信
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,579评论 18 139
  • 框架提出的背景 ES6/7带来的变革 自ES6确定和ES7中async/await开始普及,Node的发展变得更加...
    宫若石阅读 8,477评论 1 14
  • 原文链接:http://www.jianshu.com/p/6b816c609669 前传 出于兴趣最近开始研究k...
    悬笔e绝阅读 7,194评论 1 11
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,364评论 25 707
  • 大概年假结束之后,各公司内谈及最多的话题都是关于节后综合症的问题,翻开手机也是各类信息各种励志短语纷纷涉及,而对于...
    竹叶椒阅读 222评论 3 2