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-bodyparser解析,有另一个中间件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();

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM