koa

       简单聊一下koa,koa 是express的原半人马打造,因此解决了express中的很多痛点,它的目标是成为一个更小,更具有表现力,更健壮的基于node的web框架。其主要特点是采用ES6中generator来进一步解决回调函数的问题,所以提醒一下大家,之前大家在看ES6的时候看到generator这章就默默翻过去的同学要再去翻翻书了。


环境安装

额,开始之前先搭一下环境吧!因为实在是太简单了哈!哈!哈!(感觉有点傻)

1.koa-generator

koa-generator是一款快速生成koa的脚手架工具

先全局安装

代码块
$ npm install -g koa-generator复制代码

接着进入到我们的项目文件夹


代码块

 koa2 <projectName>复制代码

大家注意一下,koa1和koa2。

简单介绍一下koa1是使用generator实现异步的,我们知道Express是基于ES5的,当新版本的node支持ES6时Express团队基于ES6的generator编写了web框架koa1,但是吧koa团队超前的基于ES7开发了koa2,koa2是通过Promise和async来实现异步的。(唉,大神们的精神果然值得我们学习)

回到正题上来,生成命令执行结束后我们来安装依赖


代码块

$ npm install复制代码


依赖安装完成后我们来启动服务


代码块

$ npm start复制代码

然后打开浏览器输入:http://localhost:3000/


这样就代表我们已经安装完成了


我们来简单看下此时的文件结构


bin/www node启动文件

public目录下面的为静态资源

routes/index.js 路由入口

routes/user.js 开发者配置路由的文件

view目录下为页面文件夹

app.js入口文件


2.接下来我们来手动安装一下

进入到工程目录下初始化一下


代码块
npm init复制代码

接下来添加我们要安装的koa版本

打开package.json,添加

代码块

"dependencies": {复制代码
        "koa": "2.0.0"复制代码
   }复制代码


安装依赖

代码块
npm install复制代码


新建app.js,并添加一下代码

代码块
//在koa2中,我们导入的是一个class,因此用大写的Koa表示复制代码
const Koa = require('koa');复制代码
// 创建一个Koa对象表示web app本身:复制代码
const app = new Koa();复制代码
// 对于任何请求,app将调用该异步函数处理请求:复制代码
app.use(async (ctx, next) => {复制代码
    await next();复制代码
    ctx.response.type = 'text/html';复制代码
    ctx.response.body = '<h1>Hello, koa2!</h1>';复制代码
});复制代码
// 在端口8000监听:复制代码
app.listen(8000);复制代码
console.log('app started at port 8000...');复制代码


接下来启动服务


代码块
node app.js复制代码


接着访问本机的8000端口就会出现信息了




级联

先写一个最简单的koa应用程序

代码块

const Koa = require('koa');复制代码
const app = new Koa();​复制代码
app.use(async ctx => {复制代码
  ctx.body = 'Hello World';复制代码
});复制代码
app.listen(3000);复制代码


运行一下


看就这么几行简单的代码就构建了一个最简单的应用程序

但是大家可能会问是建立了一个应用程序,但是我写这么一个东西完全没有用啊!

是的,接下来重点来了,试想一下当用户访问我们的网站时,我们对于请求要做很多复杂的处理,不可能是这么简单的返回,在koa中这个概念就是级联我们也可以叫做中间件,再简单一点说就是中间件就像是一个过滤器,可以对请求和响应进行处理。


下面来个简单的例子


代码块
let koa = require('koa');复制代码
let app = new koa();复制代码
app.use((ctx, next) => {复制代码
  console.log("A");复制代码
  next(); // next不写会报错复制代码
  console.log(5)复制代码
});复制代码
app.use((ctx, next) => {复制代码
  console.log("B");复制代码
  next();复制代码
  console.log(4)复制代码
});复制代码
app.use((ctx, next) => {复制代码
  console.log("C");复制代码
  ctx.body = 'Hello World';复制代码
});复制代码

当访问http://localhost:3000/时终端如下



可以看到当一个中间件调用 next() 则该函数暂停并将控制传递给定义的下一个中间件。当在下游没有更多的中间件执行后,堆栈将展开并且每个中间件恢复执行其上游行为。


接下介绍几个常用函数:(接下一些会引用到koa官网中的一些内容)

app.listen()

Koa 应用程序不是 HTTP 服务器的1对1展现。 可以将一个或多个 Koa 应用程序安装在一起以形成具有单个HTTP服务器的更大应用程序


代码块
const Koa = require('koa');复制代码
const app = new Koa();复制代码
app.listen(3000);复制代码
//实质为复制代码
const http = require('http');复制代码
const Koa = require('koa');复制代码
const app = new Koa();复制代码
http.createServer(app.callback()).listen(3000);复制代码

复制代码


下面的形式也是可以的

代码块
const http = require('http');复制代码
const https = require('https');复制代码
const Koa = require('koa');复制代码
const app = new Koa();复制代码
http.createServer(app.callback()).listen(3000);复制代码
https.createServer(app.callback()).listen(3001);复制代码


app.callback()

用于 http.createServer() 方法的回调函数来处理请求。


app.use(function)

将给定的中间件方法添加到此应用程序


app.keys=

设置签名的 Cookie 密钥。



Context上下文

在node中我们来对请求进行处理的是request对象和response,在koa中对request和response封装到了一个对象中,也就是context对象,不过在接收其中我们一般用ctx,来表示

我们可以试着执行下面的代码:


代码块
let koa = require('koa');复制代码
let app = new koa();复制代码
app.use(async ctx => {复制代码
    ctx.body = ctx; // 这是 Context复制代码
    // console.log(ctx);复制代码
  });复制代码
app.listen(3000); 复制代码




这就是所谓的上下文,至于里面具体的API大家可以参考官网



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值