Koa2——中间件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Koa2——中间件相关的知识,希望对你有一定的参考价值。

1.什么是koa2中间件?

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

技术分享图片

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

二、常用的五个中间件

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

var Koa = require(koa);
var app = new Koa();
 
// 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 = new Koa();
const router=new Router();


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=new Koa();
//配置模板解析器
app.use(views(__dirname+/views,{
    map:{
        html:swig
    }
}));

app.use(async function(ctx,next){
    await ctx.render(layout);
})

app.listen(3000);

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

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

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() {
  return pool.getConnection().disposer(function(connection) {
    pool.releaseConnection(connection);
  });
}

async function execSql(sql){
    let result=null;
    await Promise.using(getSqlConnection(), function(connection) {
        return connection.query(sql)
        .then(function(rows) {
            result=rows;
        }).catch(function(error) {
            console.log(error);
        });
    })
    return result;
}
module.exports = execSql;

 

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

function SingerDb(){

}
SingerDb.prototype.querySinger=async function(){
    let sql=select * from singer;
    return execSql(sql);
}
SingerDb.prototype.querySingers=async function(){
    let sql=select id,name from singer;
    return execSql(sql);
}
SingerDb.prototype.addSinger=async function(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;
    // });
    return execSql(sql);
}
SingerDb.prototype.delSinger=async function(id){
    let sql=`delete from singer where id=${id}`;
    return execSql(sql);
}
SingerDb.prototype.querySingerById=async function(id){
    let sql=`select * from singer where id=${id}`;
    return execSql(sql);
}
SingerDb.prototype.updateSinger=async function(singer){
    let sql=`update singer set name=${singer.name} where id=${singer.id}`;
    return execSql(sql);
}
// let singer={
//     name:‘张靓颖‘,
//     englishname:‘amanda‘,
//     guoji:‘中国‘,
//     chushengdi:‘中国湖南‘,
//     jobs:‘歌手‘
// }

// new SingerDb().addSinger(singer);
// new SingerDb().querySinger();
module.exports=new SingerDb();

 

以上是关于Koa2——中间件的主要内容,如果未能解决你的问题,请参考以下文章

koa2系列教程koa2使用路由中间件

koa2中间件koa和koa-compose源码分析原理

koa2 从入门到进阶之路

koa2中间件简易分析

koa2中间件简易分析

Koa2学习中间件