koa 基本复习

我发现不写csdn 笔记就白学了,忘记的速度好快,所以要做好笔记!

我们要复习的是koa ,这个是node 服务器框架,非常优秀,能让我们更好的理解,服务器有哪些功能

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

let server=new koa();
server.listen(8080);

//
let router=new Router();

router.use('/user', require('./routers/user'));

server.use(router.routes());

上面是基本路由的写法! 路由支持嵌套路由,我们去 看下 /routers/user 下的模块,默认会找到index.js

以上就是Node 模块化机制

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

let router=new Router();

router.get('/', async ctx=>{
  ctx.body='用户';
});
router.use('/company', require('./company'));
router.use('/admin', require('./admin'));

module.exports=router.routes();

admin.js

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

let router=new Router();

router.get('/a', async ctx=>{
  ctx.body='管理员的a';
});

module.exports=router.routes();

company.js

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

let router=new Router();

router.get('/a', async ctx=>{
  ctx.body='企业的a';
});

module.exports=router.routes();

 

上面就是嵌套路由,那么好,下面我们就要对上面的路由进行画图解释

koa 中路由机制,很不错,可以嵌套路由,完全可以满足各种需求,我们很开心,为啥好,因为,只要是服务器,那么必须有路由机制,mvc 中c (控制器) 肯定有路由功能!


2, 参数的接收

//新建一个路由
let router=new Router();


//具名参数
router.get('/news/:id/', async (ctx, next)=>{
  let {id}=ctx.params;

  ctx.body='bbb';

  await next();
});

// 第二个参数
router.get('/news/1/', async ctx=>{
  let {id}=ctx.params;

  ctx.body+='aaa';
});
router.get('/news/', async ctx=>{
  let {id}=ctx.query;
  console.log(ctx.query);

  ctx.body='bbb';
});

通过上面我们可以很开心的接收,get 后面的参数,和  /user/xxx ,这种类似于静态 路由的方式的 参数

下面我就画个图解释下:



 



koa-static 的使用

const Koa=require('koa');
const Router=require('koa-router');
const static=require('koa-static');

let server=new Koa();
server.listen(8080);

//
let router=new Router();

router.get('/user', async ctx=>{
});

// use + router
// get + 方法
server.use(router.routes());

// 静态方法! 上面的动态路由找不到数据,就到静态路由下去找!
// http://2343324:90/
// 这个应该默认就会 找这个static 目录下的index.html ,这个是应该的!

server.use(static('./static', {
  maxage: 86400*1000,
  index: '1.html'
}));

也蛮简单的,我们画个图解释下:

 

localhost:3000/1.html
访问如下的静态文件,由于我们配置了
静态路由那么,它就会到 static 目录下去找
index.html 文件


可以将静态资源文件和路由 配合在一起使用:

const Koa=require('koa');
const Router=require('koa-router');
const static=require('koa-static');

let server=new Koa();
server.listen(8080);

//
let router=new Router();

router.get('/user', async ctx=>{
});

server.use(router.routes());



// 路由配合静态中间, 两个中间键的配合

// 为多个 静态资源设置缓存的静态路由!

let staticRouter=new Router();
staticRouter.all(/(\.jpg|\.png|\.gif)$/i, static('./static', {
  maxage: 60*86400*1000
}));
staticRouter.all(/(\.css)$/i, static('./static', {
  maxage: 1*86400*1000
}));
staticRouter.all(/(\.html|\.htm|\.shtml)$/i, static('./static', {
  maxage: 20*86400*1000
}));
staticRouter.all('', static('./static', {
  maxage: 30*86400*1000
}));

server.use(staticRouter.routes());

 

以上可以为不同的静态资源设置不同的缓存时间,同时我们发现 路由url 支持正则表达式!

 


文件的上传控件的使用

const Koa=require('koa');
const Router=require('koa-router');


// koa-better-body的使用!
const body=require('koa-better-body');

let server=new Koa();
server.listen(8080);

server.use(body({
  uploadDir: './static/upload'
}));

server.use(async ctx=>{
  //文件和post数据
  console.log(ctx.request.fields);

  ctx.body='aaa';
});

这个没啥说的,很简单,就是 koa-better-body 安装需要git  设置到环境变量Path中,否则会 导致无法安装 koa-better-body

模块!

可以看到我们git 的bin 目录配置到了环境变量中了!

 


cookie的使用,koa 内置cookie

const Koa=require('koa');
const Router=require('koa-router');

let server=new Koa();
server.listen(8080);

//循环秘钥!
server.keys=[
  'sdfasdfasdfsadfasddfsdaf',
  'gutryurtyhfddyt8uytug',
  'tyutryur687tyuyujghjkhj',
];
server.use(async ctx=>{

	// cookie 的使用!
  //ctx.cookies.set('user', 'blue', {signed: true});
  console.log(ctx.cookies.get('user', {signed: true}));
});

session 的使用

const Koa=require('koa');
const Router=require('koa-router');
const session=require('koa-session');

let server=new Koa();
server.listen(8080);

//server 必须加密码!
server.keys=[
  'asdfasdfasdfasdfasdf',
  'hghjfgjghjkyggfytyurt',
  'hjghjkfguig8ygyi8t78i8',
];

// session 的使用
server.use(session({
  maxAge: 20*60*1000,   //有效期
  renew: true           //自动续期
}, server));


server.use(async ctx=>{
  if(!ctx.session['view']){
    ctx.session['view']=0;
  }

  ctx.session['view']++;

  ctx.body=`欢迎你第${ctx.session.view}次来访`;
});

数据库的使用,和一些错误的处理技巧

const Koa=require('koa');
const Router=require('koa-router');

let server=new Koa();
server.listen(8080);


// 这个数据库的操作和 express 没多大关系!就是mysql
// 这个和框架没多大问题!
server.context.db=require('./libs/database');


// 错误处理技巧
server.use(async (ctx, next)=>{

  try{
    await next();
  }catch(e){
    ctx.body='错了';
  }
});


let router=new Router();

router.all('*', async ctx=>{
  try{
    await next();
  }catch(e){
    ctx.body='错了-router';
  }
});

router.get('/a', async ctx=>{
  ctx.body=div.title;
});

server.use(router.routes());

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值