node.js中 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
}));

  

原文地址:https://www.cnblogs.com/jkko123/p/10296491.html

时间: 2024-07-31 15:20:21

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

node.js中的框架

载自: http://nodeframework.com/ MVC frameworks Sinatra-like These frameworks offer rich configuration and are less opinionated than Rails-like or full-stack. Express hapi    flatiron     MEAN.js     locomotive     total.js     koa.js     Twee.IO     Ra

配置node.js中的express框架

玩node.js,不玩后台那就是杀鸡牛刀,今天没事整理一下以前开发node.js后台的心得 1.首先安装node.js以及cnpm,在这儿我就不说了,看我node.js中的另一篇文章node.js的安装和配置 安装express框架: sudo cnpm install express -g 全局安装express, 之后再安装express生成器,用下面语句就能安装 sudo cnpm install -g express-generator 此时你就可以输入 express -v 查看你所安

Node.js中使用redis数据库的正确姿势

Redis是一个常用的Nosql数据库,一般用来代替Memcached做缓存服务,同时它也支持数据的持久化,有着比较广泛的应用场景.在Java中使用redis我们已经比较熟悉了,那么在node.js和koa.js框架中使用Redis的正确姿势是怎样的呢? Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis 与其他 key - value 缓存产品有以下三个特点: * Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载

node.js 11 Web框架Express 介绍,安装,静态页面,路由

本文参考原文-http://bjbsair.com/2020-03-22/tech-info/2815/前面介绍了node.js的文件模块,http server以及静态网站的创建.有了这些知识作为基础,我们可以了解一下node.js的Web框架了. 从Java一路过来的朋友可能觉得Web框架还是比较重量级的,比如最初的Struts到后来的Spring,中间Apache组织也有过一些其他的模板框架,总体而言无论是从使用还是学习来讲,都是需要花费较多时间的.对于大型应用而言,这个投入是值得的.如果

node.js中的交互式运行环境-REPL

<Node.js权威指南>第2章Node.js中的交互式运行环境--REPL 开发者可以在该环境中很方便地输入各种JavaScript表达式并观察表达式的运行结果. 在学习Node.js框架的过程中,通过该运行环境的使用,我们可以很方便地了解Node.js中定义的各种对象所拥有的各种属性及方法.本节为大家介绍在REPL运行环境中操作变量 2.2 在REPL运行环境中操作变量 在REPL运行环境中,可以使用var关键字来定义一个变量并为其赋值,但是在输入了对其赋值进行的表达式后,该表达式的执行结

Node.js的知识点框架整理

背景:因为appium是基于Node.js的,所以想看一下Node.js.但是发现很多资料的顺序看起来有点颠倒.然后就一面看资料一面整理了一下大概的知识点框架,希望对自己对别人有用. 本文不包含node.js的基本语法.node.js的基本语法和JavaScript基本一样,可以以后再单独整理一份基本语法的. Node.js是一个基于chrome V8的JavaScript运行时的环境 Node.js是事件驱动,非阻塞式I/O模型 Node.js使用npm包管理器 使用Node.js不仅实现了一

Node.js的Connect框架的代码重写与改进

Node.js的Connect框架的代码重写与改进 Connect框架简介 Connect框架是建立在Node.js的基本http.server功能之上,帮助实现结构化的web服务器逻辑的框架.Connect框架建立在两个重要的设计模式之上. 1) 责任链模式 在处理web请求时常需要作分派处理.例如,ASP.NET MVC支持按照请求参数将处理分派至某个Controller类的某个Action方法,以及根据Action方法的返回结果类型分派不同的结果操作(如ViewResult.JsonRes

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

补充:http://nokit.org/ https://thinkjs.org/zh-cn/doc/index.html Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台, 用来方便地搭建快速的, 易于扩展的网络应用· Node.js 借助事件驱动, 非阻塞 I/O 模型变得轻量和高效, 非常适合 run across distributed devices 的 data-intensive 的实时应用· 本文介绍 10 个基于 Node.js 的 MVC 框

node.js中的回调

同步和阻塞:这两个术语可以互换使用,指的是代码的执行会在函数返回之前停止.如果某个操作阻塞,那么脚本就无法继续,这意味着必须等待. 异步和非阻塞:这两个术语可以互换使用,指的是基于回调的.允许脚本并行执行操作的方法.脚本无需等待某个操作的结果才能继续前进,因为操作结果会在事件发生时由回调来处理.使用异步方法,操作无需一个接一个地发生(自己注:就是并行了). @1 同步和阻塞的例子: function sleep(milliseconds) { var start = new Date().get