koa2 mysql 中间件_Koa2——中间件

1.什么是koa2中间件?

koa对网络请求采用了中间件的形式处理,中间件可以介入请求和相应的处理,是一个轻量级的模块,每个中间负责完成某个特定的功能。中间件的通过next函数联系,执行next()后会将控制权交给下一个中间件,如果没有有中间件没有执行next后将会沿路折返,将控制权交换给前一个中间件。

7d59df13978f92c14ab30762527d071c.png

当执行app.listen方法开启服务器时,实际上是在内部,使用http模块,启动了http服务器,并将自身的callback函数传入

二、常用的五个中间件

1.koa:面向node.js的表达式HTTP中间件框架,使Web应用程序和API更加令人愉快地编写。Koa的中间件堆栈以类似堆栈的方式流动,允许您执行下游操作,然后过滤和处理上游的响应。

var Koa = require('koa');var app = newKoa();//response

app.use(ctx =>{

ctx.body= 'Hello World';

});

app.listen(3000);

2.koa-router:Router middleware for koa(koa的路由中间件)

const Koa = require('koa');const Router=require('koa-router');const app = newKoa();const router=newRouter();

router.get('/',function(ctx,next){

ctx.body='hello hello';

})

app.use(router.routes());

app.listen(3000);

3.koa-views:Template rendering middleware for koa.(koa的模板渲染中间件)

ctx:为网络处理上下文,next指向下个中间件

swig:http://www.jianshu.com/p/f0bffc42c1ce

const Koa=require('koa');const views=require('koa-views');const app=newKoa();//配置模板解析器

app.use(views(__dirname+'/views',{

map:{

html:'swig'}

}));

app.use(asyncfunction(ctx,next){await ctx.render('layout');

})

app.listen(3000);

4.koa-bodyparser:用来解析body的中间件,比方说你通过post来传递表单,json数据,或者上传文件,在koa中是不容易获取的,通过koa-bodyparser解析之后,在koa中this.body就能直接获取到数据。ps:xml数据没办法通过koa-bodyparser解析,有另一个中间件koa-xml-body。

var Koa = require('koa');var bodyParser = require('koa-bodyparser');var app = newKoa();

app.use(bodyparser({

enableTypes:['json', 'form', 'text']

}));

app.use(async ctx =>{

ctx.body=ctx.request.body;

});

app.listen(3000);

5.promise-mysql:Promise-mysql是mysqljs / mysql的一个包装函数,它包含Bluebird承诺的函数调用。通常这会用Bluebird的.promisifyAll()方法完成,但是mysqljs / mysql的脚本与Bluebird所期望的不同。

对于重复的代码我们将它封装在一起,方便使用,提高代码的重用性,DbUtil.js

var mysql=require('promise-mysql');var Promise=require('bluebird');

pool=mysql.createPool({

host:'192.168.22.2',

user:'root',

password:'root',

database:'music',

connectionLimit:2});//此处可根据实际情况更改

function getSqlConnection() {returnpool.getConnection().disposer(function(connection) {

pool.releaseConnection(connection);

});

}asyncfunction execSql(sql){

let result=null;await Promise.using(getSqlConnection(), function(connection) {returnconnection.query(sql)

.then(function(rows) {

result=rows;

}).catch(function(error) {

console.log(error);

});

})returnresult;

}

module.exports= execSql;

var execSql=require('./DbUtil.js');

function SingerDb(){

}

SingerDb.prototype.querySinger=asyncfunction(){

let sql='select * from singer';returnexecSql(sql);

}

SingerDb.prototype.querySingers=asyncfunction(){

let sql='select id,name from singer';returnexecSql(sql);

}

SingerDb.prototype.addSinger=asyncfunction(singer){

let sql=`insert into singer (name,englishname,guoji,chushengdi,jobs,picName) values ('${singer.name}','${singer.englishname}','${singer.guoji}','${singer.chushengdi}','${singer.jobs}','${singer.picName}')`;//execSql(sql).then(function(rows){//return rows;//});

returnexecSql(sql);

}

SingerDb.prototype.delSinger=asyncfunction(id){

let sql=`delete from singer where id=${id}`;returnexecSql(sql);

}

SingerDb.prototype.querySingerById=asyncfunction(id){

let sql=`select * from singer where id=${id}`;returnexecSql(sql);

}

SingerDb.prototype.updateSinger=asyncfunction(singer){

let sql=`update singer set name='${singer.name}' where id=${singer.id}`;returnexecSql(sql);

}//let singer={//name:'张靓颖',//englishname:'amanda',//guoji:'中国',//chushengdi:'中国湖南',//jobs:'歌手'//}//new SingerDb().addSinger(singer);//new SingerDb().querySinger();

module.exports=new SingerDb();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值