一、安装 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
}));
koa是一个基于node实现的一个新的web框架,它是由express框架的原班人马打造的。它的特点是优雅、简洁、表达力强、自由度高。它更express相比,它是一个更轻量的node框架
koa-easywechat注意:koa-easywechat中间件要写在最前面,也就是要第一个use,因为我在ctx上挂载了一个wechat对象,这个对象实现了大部分的微信接口,这样才能保证开发者在自己的写路由里,获取到ctx.wechat进行自己的业务开发
我们知道,Koa 中间件是以级联代码(Cascading) 的方式来执行的。类似于回形针的方式,今天这篇文章就来分析 Koa 的中间件是如何实现级联执行的。在 koa 中,要应用一个中间件,我们使用 app.use()
Koa 是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石。 通过利用 async 函数,Koa 帮你丢弃回调函数,并有力地增强错误处理。
想使用nodejs(koa)搭建一个完整的前后端,完成数据的增删改查,又不想使用数据库,那使用json文件吧。本文介绍了基于koa的json文件的增、删、改、查。
对于一个服务器应用来说,日志的记录是必不可少的,我们需要使用其记录项目程序每天都做了什么,什么时候发生过错误,发生过什么错误等等,便于日后回顾、实时掌握服务器的运行状态,还原问题场景
Koa 应用程序是一个包含一组中间件函数的对象,它是按照类似堆栈的方式组织和执行的。当一个中间件调用 next() 则该函数暂停并将控制传递给定义的下一个中间件。当在下游没有更多的中间件执行后,堆栈将展开并且每个中间件恢复执行其上游行为
上传文件在开发中是很常见的操作,今天我选择使用koa-multer中间件来实现这一功能,除了上传文件外,我还会对文件上传进行限制,以及发生上传错误时的处理。由于原来的 koa-multer 已经停止维护,我们要使用最新的 @koa/multer
这篇文章会讲些什么?如何从零开始完成一个涵盖Koa核心功能的Node.js类库,从代码层面解释Koa一些代码写法的原因:如中间件为什么必须调用next函数、ctx是怎么来的和一个请求是什么关系
Nodejs官方api支持的都是callback形式的异步编程模型。问题:callback嵌套问题,koa2 是由 Express原班人马打造的,是现在比较流行的基于Node.js平台的web开发框架,Koa 把 Express 中内置的 router、view 等功能都移除了
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!