关闭

node.js中 koa 框架的基本使用方法

时间: 2019-01-21阅读: 1075标签: koa

一、安装 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
}));
站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

2.广告联盟: 整理了目前主流的广告联盟平台,如果你有流量,可以作为参考选择适合你的平台点击进入

链接: http://www.fly63.com/article/detial/1851

关闭

从零实现TypeScript版Koa

这篇文章会讲些什么?如何从零开始完成一个涵盖Koa核心功能的Node.js类库,从代码层面解释Koa一些代码写法的原因:如中间件为什么必须调用next函数、ctx是怎么来的和一个请求是什么关系

Koa中间件

Koa 应用程序是一个包含一组中间件函数的对象,它是按照类似堆栈的方式组织和执行的。当一个中间件调用 next() 则该函数暂停并将控制传递给定义的下一个中间件。当在下游没有更多的中间件执行后,堆栈将展开并且每个中间件恢复执行其上游行为

koa-easywechat_一个基于koa2的微信开发中间件

koa-easywechat注意:koa-easywechat中间件要写在最前面,也就是要第一个use,因为我在ctx上挂载了一个wechat对象,这个对象实现了大部分的微信接口,这样才能保证开发者在自己的写路由里,获取到ctx.wechat进行自己的业务开发

读 koa2 源码后的一些思考与实践

Nodejs官方api支持的都是callback形式的异步编程模型。问题:callback嵌套问题,koa2 是由 Express原班人马打造的,是现在比较流行的基于Node.js平台的web开发框架,Koa 把 Express 中内置的 router、view 等功能都移除了

koajs--基于node.js的下一代web开发框架

Koa 是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石。 通过利用 async 函数,Koa 帮你丢弃回调函数,并有力地增强错误处理。

koa2中间件_深入理解 Koa2 中间件机制

我们知道,Koa 中间件是以级联代码(Cascading) 的方式来执行的。类似于回形针的方式,今天这篇文章就来分析 Koa 的中间件是如何实现级联执行的。在 koa 中,要应用一个中间件,我们使用 app.use()

了解Koa和创建路由实例

koa 是由 Express 原班人马打造的,一个基于 Node.js 平台的 Web 开发框架,Express 是基于 ES5 的语法,随着新版 Node.js 开始支持 ES6 ,该团队重新编写诞生了 koa 1.0

KOA2框架原理解析和实现

koa是一个基于node实现的一个新的web框架,它是由express框架的原班人马打造的。它的特点是优雅、简洁、表达力强、自由度高。它更express相比,它是一个更轻量的node框架

Koa使用koa-multer上传文件(上传限制、错误处理)

上传文件在开发中是很常见的操作,今天我选择使用koa-multer中间件来实现这一功能,除了上传文件外,我还会对文件上传进行限制,以及发生上传错误时的处理。由于原来的 koa-multer 已经停止维护,我们要使用最新的 @koa/multer

基于Koa(nodejs框架)对json文件进行增删改查

想使用nodejs(koa)搭建一个完整的前后端,完成数据的增删改查,又不想使用数据库,那使用json文件吧。本文介绍了基于koa的json文件的增、删、改、查。

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!