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();
时间: 2024-10-11 06:07:15

Koa2——中间件的相关文章

koa2 中间件里面的next到底是什么

koa2短小精悍,女人不爱男人爱. 之前一只有用koa写一点小程序,自认为还吼吼哈,知道有一天某人问我,你说一下 koa或者express中间件的实现原理.然后我就支支吾吾,好久吃饭都不香. 那么了解next的最好办法是什么, 百度,谷歌,知乎?  没错,肯定有用,我觉得最有用的是看源码和debug去理解. 先看下面的一段代码 ,会输出什么,只会输出  X-Response-Time const Koa = require('koa'); const app = new Koa(); // x-

全栈项目|小书架|服务器开发-Koa2中间件机制洋葱模型了解一下

KOA2 是什么? Koa是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小.更富有表现力.更健壮的基石. 通过利用 async函数,Koa帮你丢弃回调函数,并有力地增强错误处理. Koa 并没有捆绑任何中间件, 而是提供了一套优雅的方法,帮助您快速而愉快地编写服务端应用程序. 为什么产生? 笔者对这几个框架都不熟,这里就不误人子弟了.可以看看下面一些大佬的介绍. Koa是由Express的原班人马打造,那么他们为什么不将

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

koa是基于nodejs平台的下一代web开发框架,它是使用generator和promise,koa的中间件是一系列generator函数的对象.当对象被请求过来的时候,会依次经过各个中间件进行处理,当有yield next就跳到下一个中间件,当中间件没有 yield next执行的时候,然后就会逆序执行前面那些中间件剩下的逻辑代码,比如看如下的demo: const Koa = require('koa'); const app = new Koa(); app.use(async (ctx

koa2中间件

在我看来,前端框架的中间件的思想来源于传统后端的切面编程(AOP)思想,比如我们常见的身份校验(JWT). axios的拦截器也是基于这种程序设计模式的. 在koa中,实际上是由一个数组对象来保存所有的中间件的,原理解析可以参考这篇博客:https://www.cnblogs.com/dashnowords/p/10439605.html. 除此之外,还得益于js的异步事件队列,关于异步事件队列,可参考这篇博客:https://www.cnblogs.com/eco-just/p/1038993

koa2 use里面的next到底是什么

koa2短小精悍,女人不爱男人爱. 之前一只有用koa写一点小程序,自认为还吼吼哈,知道有一天某人问我,你说一下 koa或者express中间件的实现原理.然后我就支支吾吾,好久吃饭都不香. 那么了解next的最好办法是什么, 百度,谷歌,知乎?  没错,肯定有用,我觉得最有用的是看源码和debug去理解. 先看下面的一段代码 ,会输出什么,只会输出  X-Response-Time const Koa = require('koa'); const app = new Koa(); // x-

nodejs 中间件理解

中间件概念 在NodeJS中,中间件主要是指封装所有Http请求细节处理的方法.一次Http请求通常包含很多工作,如记录日志.ip过滤.查询字符串.请求体解析.Cookie处理.权限验证.参数验证.异常处理等,但对于Web应用而言,并不希望接触到这么多细节性的处理,因此引入中间件来简化和隔离这些基础设施与业务逻辑之间的细节,让开发者能够关注在业务的开发上,以达到提升开发效率的目的. 中间件的行为比较类似Java中过滤器的工作原理,就是在进入具体的业务处理之前,先让过滤器处理.它的工作模型下图所示

全网首发mpvue课程小程序全栈开发

第1章 课程简介 本章节介绍了课程概述,教学方式 ,还有小程序项目的演示. 第2章 原生小程序 对原生小程序做一个入门的介绍,包括小程序帐号申请和开发工具安装和使用,小程序目录文件的讲解,再简单把小程序原生的组件和API过一下. 第3章 使用vuejs开发小程序 本章节用一个todolist案例,带着vuejs入门,再用mpvue的方式重写这个案例,为实战项目开发打好基础. 第4章 koa2入门 本章节讲解 koa2入门相关的基础知识点,为实战项目的服务器开发部分做准备,其中包括,使用koa2开

全网首发mpvue课程小程序全栈开发视频课程 小程序实战教程 完整版

第1章 课程简介本章节介绍了课程概述,教学方式 ,还有小程序项目的演示. 第2章 原生小程序对原生小程序做一个入门的介绍,包括小程序帐号申请和开发工具安装和使用,小程序目录文件的讲解,再简单把小程序原生的组件和API过一下. 第3章 使用vuejs开发小程序本章节用一个todolist案例,带着vuejs入门,再用mpvue的方式重写这个案例,为实战项目开发打好基础. 第4章 koa2入门本章节讲解 koa2入门相关的基础知识点,为实战项目的服务器开发部分做准备,其中包括,使用koa2开发web

全网首发mpvue课程 小程序全栈开发

第1章 课程简介本章节介绍了课程概述,教学方式 ,还有小程序项目的演示.1-1 课程简介1-2 github 获取源码1-3 github 桌面版简单管理代码1-4 git 命令行的使用1-5 mpvue 和 wepy 区别 第2章 原生小程序对原生小程序做一个入门的介绍,包括小程序帐号申请和开发工具安装和使用,小程序目录文件的讲解,再简单把小程序原生的组件和API过一下.2-1 原生小程序 - 小程序帐号和开发工具2-2 原生小程序 - 项目目录结构2-3 原生小程序 - 项目app.json