koa

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


环境安装

额,开始以前先搭一下环境吧!由于实在是太简单了哈!哈!哈!(感受有点傻)node

1.koa-generatorweb

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

先全局安装npm

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

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


代码块

koa2 <projectName>复制代码

你们注意一下,koa1和koa2。浏览器

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

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


代码块

$ npm install复制代码


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


代码块

$ 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你们能够参考官网

相关文章
相关标签/搜索