koa2的简单用法

文档地址:https://koa.bootcss.com

全局安装:

cnpm i koa-generator -g

创建项目(默认):koa2 project 

使用es引擎创建项目:koa2 -e project

启动项目:
npm start,
npm run dev(可以自启动)

 

中间件:

  • 中间件执行顺序图:

 next(); :继续往下执行下一个中间件,next非常重要,一定要写,不然后面的中间件无法执行

这么执行的好处,比如执行的顺序是responseTime里面有个time变量,运行到logger里面的time被修改了,最后执行完又回到responseTime里面,这时候就可以检查time有没有被修改.
为什么要使用asyn:因为不管有没有使用async/await,app.use返回的始终都是Promise;使用asyn的话可以更方便的在内部掉调用下一个中间件的时候使用await next(),

如果不使用async的话会出现下面这种情况
awati阻塞的话会先执行外部的程序,等带await取消阻塞后,才会await下面的方法,如下:如果没有await的话,执行顺序是
1,3,4,2,有了await的话结果是:1,3,2,4

app.use((ctx,next) =>{
    console.log(1);
    next()
    console.log(2);
});

app.use(async (ctx,next) =>{
    console.log(3);
    const axios = require('axios');
    // await 会阻塞程序,导致先执行console.log(2),再执行console.log(4)
    const res = await axios.get('https://www.baidu.com/');
    console.log(4);
});

 想要保证洋葱模型的话就要使用async/await(必须在方法前面加上async,在next()前面加上await),下面的代码的执行顺序就变成了标准的洋葱模型,1,3,4,2

app.use(async (ctx,next) =>{
    console.log(1);
    await next()
    console.log(2);
});

app.use(async (ctx,next) =>{
    console.log(3);
    const axios = require('axios');
    const res = await axios.get('https://www.baidu.com/');
    console.log(4);
});

传值:可以通过ctx获取其他中间件的状态

app.use(async (ctx,next) =>{
    await next()

    // ctx.ending一定要在next()后面获取,否则娶不到哦
    console.log(ctx.ending); // 执行完毕
});

app.use(async (ctx,next) =>{
    await next()
});

app.use(async (ctx,next) =>{
    await next();
    ctx.ending = '执行完毕';
});


router:(可以去github上搜koa-router看下方法就行.)

const router = require('koa-router')()

// render:渲染页面的
router.get('/', async (ctx, next) => {
  await ctx.render('index', {
    title: 'Hello Kodddda 2dd!'
  })
})
// ctx.body:用来写接口的
router.get('/string', async (ctx, next) => {
  ctx.body = 'koa2 string'
})

module.exports = router; // 不要忘了导出哦,导出后在app.js里面 app.use(XX)
router.prefix('/users'); // 路由模块化;

// 访问这个页面 http://localhost:3000/users/bar
router.get('/bar', function (ctx, next) {
  ctx.body = 'this is a users/bar response'
})

cookies和session
cookies用法: ctx.cookies.set('name', 'tobi', { signed: true });
session:服务端用session来保存用户状态和标识。
session和cookie的关系是,服务端把session设置到cookie里并传给客户端,客户端下次访问服务器其他接口时,又会通过cookie把这个session信息传给服务端,服务端通过session判断用户是否满足需求。

redis:

安装:(www.runoob.com/redis/redis-install.html)

启动:redis-server

项目中安装中间件:
npm i koa-generic-session koa-redis
koa-generic-session:处理session
koa-redis:链接redis的
session存储到redis中

app.js中:

const session = require('koa-generic-session');
const Redis = require('koa-redis');
// 连接
app.keys = ['keys','keyskeys']; // 做加密处理 
app.use(session({
    key:'mt', // 将koa关键字换成mt
    prefix:'mtpr',
    store:new Redis()
}))

设置session变量;
再根目录新建middle/m.js,加入以下代码

//m.js添加如下代码
function m(ctx){
     ctx.session.count++;
    global.console.log('mm',ctx.path)
}
module.exports = function (){
    return async function(ctx,next){
        m(ctx)
        await next();
    }
}

// app.js添加以下代码
const m = require('./middle/m');
app.use(m())

然后刷新页面,在Application下面的cookies里面就可以看到新加入的.sig信息

再redis服务中查看存储的是什么,读取出来;
启动:redis-cli;
输入 命令 keys* ,就可以看到所有的key下面的value

读取可以下面的count值;输入命令:get mtprAF79ui_pGNBiH6ETmyymGmSaLITz8Cq4

 

直接操作redis(不需要session)

在建一个接口;

在routes/users.js里面加以下代码

const Redis = require('koa-redis');
const Store = new Redis().client

router.get('/fix', async function (ctx) {
    const st = await Store.hset('fix','name','asdfghjkl');
    ctx.body = {
        code: 0
    }
})

项目下控制面板输入 curl http://localhost:3000/users/fix 回车,出现code:0,就是成功的意思

然后回到之前的命令行面板输入keys *,就可以看到fix出现在下面了;

输入hget fix name,就可以看到具体的值了

更多命令可以去文档下查看(http://www.runoob.com/redis/redis-commands.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Koa2是一个基于Node.js的Web开发框架,而MySQL是一种关系型数据库管理系统。将它们结合起来,可以更方便地进行Web开发。 以下是Koa2和MySQL入门的基本步骤: 1. 安装Koa2和MySQL模块 使用npm安装koa和mysql模块: ``` npm install koa mysql ``` 2. 连接MySQL数据库 在应用程序中,需要连接到MySQL数据库。可以使用以下代码: ``` const mysql = require('mysql'); const connection = mysql.createConnection({ host: 'localhost', user: 'root', password: 'password', database: 'database_name' }); connection.connect(); ``` 其中,`host`是数据库服务器的地址,`user`是用户名,`password`是密码,`database`是要连接的数据库名称。 3. 执行SQL查询 连接到数据库后,可以执行SQL查询。以下是一个简单的查询示例: ``` connection.query('SELECT * FROM users', function (error, results, fields) { if (error) throw error; console.log(results); }); ``` 在这个示例中,使用`SELECT`语句从`users`表中检索所有行。查询结果将在控制台中打印出来。 4. 在Koa2中使用MySQL 在Koa2应用程序中,可以使用`koa-mysql`模块来更方便地使用MySQL。以下是一个简单的示例: ``` const Koa = require('koa'); const app = new Koa(); const mysql = require('koa-mysql'); app.use(async (ctx, next) => { const db = await mysql.createPool({ host: 'localhost', user: 'root', password: 'password', database: 'database_name' }); const results = await db.query('SELECT * FROM users'); ctx.body = results; }); app.listen(3000); ``` 在这个示例中,使用`koa-mysql`模块创建一个MySQL连接池。然后,使用`query`方法从`users`表中检索所有行,并将结果作为响应主体发送给客户端。 这只是一个简单的入门示例。在实际应用中,可能需要更复杂的查询和数据操作。但是,通过这个入门示例,您应该已经了解了如何将Koa2和MySQL结合起来进行Web开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值