一、安装 koa

npm install koa --save

  

二、简单使用

const koa = require('koa');
//注意使用koa需要new,跟express有点不同
let app = new koa();
app.listen(8888); //use()方法将中间件加入应用中
app.use(async function (ctx, next) {
//ctx.res 原生res
//ctx.req 原生req
//ctx.request 被koa包装过的req对象
//ctx.response 被koa包装过的res对象
ctx.response.body = 'ok';
}); //发生错误时触发
app.on('error', function (err) {
console.log(err);
});

  

三、级联中间件的概念

const koa = require('koa');
let app = new koa();
app.listen(8888); app.use(async function (ctx, next) {
console.log('1');
await next();
console.log('2');
}); app.use(async function (ctx, next) {
console.log('3');
await next();
console.log('4');
}); app.use(async function (ctx, next) {
console.log('5');
});

上述代码最终会打印出 1 3 5 4 2,koa中间件里的 await next() 之前的代码会一级一级向下执行,直到没有更多中间件执行,然后再像栈一样的执行 await next() 之后的代码。

四、获取get请求参数

const koa = require('koa');
const router = require('koa-router');
let app = new koa();
let route = new router();
app.listen(8888); route.get('/:id', function (ctx, next) {
//获取请求方法
console.log(ctx.method);
//获取请求URL
console.log(ctx.url);
//获取请求路径
console.log(ctx.path);
//获取请求查询字符串对象
console.log(ctx.query);
//获取请求查询字符串
console.log(ctx.querystring);
//获取路由参数
console.log(ctx.params);
//获取请求头对象
console.log(ctx.headers);
}); app.use(route.routes());

  

五、获取post表单数据和文件上传

安装 koa-better-body 用于解析

npm install koa-better-body --save
npm install koa-convert --save

注意使用 koa-better-body 需要用 koa-convert 转换一下。

const fs = require('fs');
const path = require('path');
const koa = require('koa');
const router = require('koa-router');
const betterBody = require('koa-better-body');
const convert = require('koa-convert');
let app = new koa();
let route = new router();
app.listen(8888); //使用koa-better-body需要用koa-convert转一下
app.use(convert(betterBody({
//指定上传的目录
uploadDir: path.join(__dirname, 'uploads'),
//是否保留扩展名
keepExtensions: true,
//设置上传文件大小最大限制,默认2M
maxFileSize: 1024 * 1024 * 1024
}))); route.get('/', function (ctx, next) {
ctx.response.set('Content-Type', 'text/html;charset=utf-8');
ctx.body = fs.readFileSync('./index.html');
}); route.post('/post', function (ctx, next) {
//post表单数据
console.log(ctx.request.fields);
//上传文件的详细信息
console.log(ctx.request.files);
}); app.use(route.routes());

index.html的代码:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>表单</title>
</head>
<body>
<form action="http://localhost:8888/post" method="post" enctype="multipart/form-data">
用户名:<input type="text" name="name"><br>
密码:<input type="password" name="pwd"><br>
头像:<input type="file" name="head"><br>
信息1:<input type="file" name="info"><br>
信息2:<input type="file" name="info"><br>
<input type="submit" name="提交">
</form>
</body>
</html>

  

六、路由中间件 koa-router

npm install koa-router --save

路由是可以设置多级的,可以嵌套。方便我们自由拆分。

const koa = require('koa');
const router = require('koa-router');
let app = new koa();
app.listen(8888); let users = new router();
let order = new router(); users.get('/', function (ctx) {
ctx.body = '用户页面';
}); users.get('/add', function (ctx) {
ctx.body = '用户添加页面';
}); order.get('/', function (ctx) {
ctx.body = '订单页面';
}); order.get('/add', function (ctx) {
ctx.body = '订单添加页面';
}); let route = new router();
route.use('/users', users.routes());
route.use('/order', order.routes());
app.use(route.routes());

  

七、cookie的设置与读取

koa中可以直接通过 ctx.cookies.set() 或 ctx.cookies.get() 进行设置和获取cookie

const koa = require('koa');
const router = require('koa-router');
let app = new koa();
app.listen(8888); //设置cookie签名加密时,需要配置密钥
app.keys = [
'2dsfjo3rt3pt934rjh2'
]; let route = new router(); route.get('/', function (ctx, next) { //参数一表示,cookie名称
//参数二表示,cookie的值
//参数三表示,cookie的配置选项
ctx.cookies.set('test', 'test', {
//cookie所在的域名
domain: 'localhost',
//cookie所在的路径
path: '/',
//有效时间,单位毫秒
maxAge: 3600 * 1000,
//失效时间
expires: new Date(Date.now() + 3600 * 1000),
//是否只能在http中获取
httpOnly: true,
//是否允许重写
overwrite: true
}); //设置cookie是否签名加密,如果设置签名加密,需配置app.keys
ctx.cookies.set('name', 'xiaoxu', {signed: true}); //获取cookie
console.log(ctx.cookies.get('test'));
console.log(ctx.cookies.get('name'));
}); app.use(route.routes());

  

八、session的使用

安装 koa-session 中间件

npm install koa-session --save

koa-session默认会话是基于cookie实现的,当然会话信息也可以保存到其它地方。

const koa = require('koa');
const router = require('koa-router');
const session = require('koa-session');
let app = new koa();
app.listen(8888); //设置签名加密的密钥
app.keys = [
'rj345jptjgadsfjeasltrg'
]; let route = new router(); //使用koa-session中间件
app.use(session({
//cookie的名称
key: 'session',
//有效时间
maxAge: 3600 * 1000,
//是否自动提交头信息
autoCommit: true,
//是否充许重写
overwrite: true,
//是否只能http获取
httpOnly: true,
//是否签名加密
signed: true
}, app)); route.get('/', function (ctx, next) {
if (ctx.session.count) {
++ctx.session.count;
} else {
ctx.session.count = 1;
}
ctx.body = `您是第 ${ctx.session.count} 次访问`;
}); app.use(route.routes());

  

九、模板引擎ejs的使用

npm install koa-ejs --save

通过ejs模板引擎,我们可以很方便的渲染页面。

const path = require('path');
const koa = require('koa');
const router = require('koa-router');
const ejs = require('koa-ejs');
let app = new koa();
app.listen(8888); let route = new router(); //模板引擎配置
ejs(app, {
//模板目录
root: path.join(__dirname, 'views'),
//布局文件
layout: false,
//模板扩展名
viewExt: 'html',
//是否开启缓存
cache: false,
//是否开启调试信息
debug: true
}); route.get('/', async function (ctx, next) {
await ctx.render('index', {
name: 'xiaoxu',
age: 24
});
}); app.use(route.routes());

  

十、静态资源中间件

我们使用 koa-static-cache 这个中间件。

npm install koa-static-cache --save

使用 koa-static-cache 帮我们处理静态资源

const path = require('path');
const koa = require('koa');
const static = require('koa-static-cache');
let app = new koa();
app.listen(8888); //使用中间件,并配置静态资源目录
app.use(static(path.join(__dirname, 'public'), {
//是否压缩文件
gzip: true,
//缓存有效时间
maxAge: 60
}));

  

node.js中 koa 框架的基本使用方法的更多相关文章

  1. node.js中的框架

    node.js中的框架 载自: http://nodeframework.com/ MVC frameworks Sinatra-like These frameworks offer rich co ...

  2. [转]Node.js中koa使用redis数据库

    本文转自:https://blog.csdn.net/offbye/article/details/52452322 Redis是一个常用的Nosql数据库,一般用来代替Memcached做缓存服务, ...

  3. node.js中express框架的基本使用

    express是一个基于node.js平台的,快速,开放,极简的web开发框架. 一.安装 express npm install express --save 二.简单使用 express //引入 ...

  4. koa : Express出品的下一代基于Node.js的web框架

    https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/001434501579966a ...

  5. 配置node.js中的express框架

    玩node.js,不玩后台那就是杀鸡牛刀,今天没事整理一下以前开发node.js后台的心得 1.首先安装node.js以及cnpm,在这儿我就不说了,看我node.js中的另一篇文章node.js的安 ...

  6. koa 基础(十)原生node.js 在 koa 中获取表单提交的数据

    1.app.js // 引入模块 const Koa = require('koa'); const router = require('koa-router')(); /*引入是实例化路由 推荐*/ ...

  7. 转 10 个最佳的 Node.js 的 MVC 框架

    10 个最佳的 Node.js 的 MVC 框架 oschina 发布于: 2014年02月24日 (33评) 分享到:    收藏 +322 Node.js 是一个基于Chrome JavaScri ...

  8. 在node.js中,使用基于ORM架构的Sequelize,操作mysql数据库之增删改查

    Sequelize是一个基于promise的关系型数据库ORM框架,这个库完全采用JavaScript开发并且能够用在Node.JS环境中,易于使用,支持多SQL方言(dialect),.它当前支持M ...

  9. Hexo - 快速,轻量,强大的 Node.js 博客框架

    Hexo 是一个快速,轻量,强大的 Node.js 博客框架.带给你难以置信的编译速度,瞬间生成静态文件:支持 Markdown,甚至可以在 Hexo 中集合 Octopress 插件:只需要一个命令 ...

随机推荐

  1. JS 格式化日期时间

    方法一: // 对Date的扩展,将 Date 转化为指定格式的String // 月(M).日(d).小时(h).分(m).秒(s).季度(q) 可以用 1-2 个占位符, // 年(y)可以用 1 ...

  2. vs2010安装的一些问题

    VS安装出现的问题一般如果出现了  基本就不会安装成功.问题出现的原因有:w7系统的版本,有些可能会安装失败,其次就是你卸载的时候不要把相应 的库及.net的库卸载  后面再安装就容易出错.这个是安装 ...

  3. 被称为“开发者神器”的GitHub,到底该怎么用?

    被称为“开发者神器”的GitHub,到底该怎么用? 原文:https://baijiahao.baidu.com/s?id=1594232691312740966&wfr=spider& ...

  4. Java同步学习(持续更新)

    在需要考虑线程安全性的场合,可以考虑以下五种方式来实现线程的安全性: 1.同步方法 即有synchronized关键字修饰的方法. 由于java的每个对象都有一个内置锁,当用此关键字修饰方法时,   ...

  5. .net updatePannel 局部刷新效果实现后,但是仍是全部刷新的修改方法

    最近做了一个小例子,就是晚上都有的那种小的updatepannel的局部刷新的小例子,但是发现按照那个例子虽然能够实现label2的局部刷新,但是看上去效果确实整个页面都在刷新,这让人很头疼,所以我在 ...

  6. [zz]如何学习Polygon Mesh Processing这本书?

    图形学初学者,如何学习Polygon Mesh Processing这本书?修改修改 导师暑假让我看看这本书,目前看了一半觉得这本书比较偏重数学基础,对于具体的 implementation提及的并不 ...

  7. git 一个分支完全覆盖另一个分支

    1,git push origin develop:master -f就可以把本地的develop分支强制(-f)推送到远程master 2,git checkout master // 切换到旧的分 ...

  8. Excel 二维数组(数据块)旋转/翻转技巧

    Excel 二维数组(数据块)旋转/翻转技巧 原创 2017-12-30 久石六 久石六 工作中遇到个问题,需要将Excel中的数据块或者说二维数组向右旋转90度,才能再加工处理.当然,不是旋转文本方 ...

  9. SAS PROC PRINT 常用选项和语句说明

    常用选项1.使用选项OBS=修改观测序号标签2.使用NOOBS选项不显示观测序号列3.使用ID语句在输出中取代观测序号列4.使用VAR选择输出的变量5.使用WHERE语句选择输出的观测6.使用数据集选 ...

  10. css变换与动画详解

    举个栗子:--------元素整体居中.box{     position:absolute;top:50%;left:50%;    width:50px;    height:50px;    t ...