koa2笔记

使用的时候

const app = new Koa2();      //application封装各种方法,如use ,listen
app.use(middleware)
app.listen(1234)
复制代码


application     Context
Request         Response
Middlewares
Session         Cookie复制代码

中间键

...
const mid1 = async(ctx,next)=>{              //async异步中间键             
    ctx.body= 'hello middleware'                
    await next()                             //多个中间键,传递到下一个
    ctx.body = ctx.body + "233back function"
    //ctx.throw()                            //错误处理  也可try catch包裹处理错误
    //ctx.response.status = 404;
    //ctx.response.body = 'Page Not Found';  //错误处理
}
...
app.use(mid1)
app.listen(9527)复制代码


koa-compose 中间键合成

const logger = (ctx, next) => {
  console.log(`${Date.now()} ${ctx.request.method} ${ctx.request.url}`);
  next();
}

const main = ctx => {
  ctx.response.body = 'Hello World';
};

const middlewares = compose([logger, main]);
app.use(middlewares);复制代码
function compose (middleware) {
	return function (context, next) {
		// last called middleware #
		let index = -1
		return dispatch(0)                       //调用开始,指向dispathc(0)
	function dispatch (i) {
  		if (i <= index) 
                    return Promise.reject(new Error('next() called multiple times'))
  		
                index = i
  		const fn = middleware[i] || next
  		if (!fn)  return Promise.resolve()
  		try {
    		    return Promise.resolve(fn(context, function next () {
      		        return dispatch(i + 1)            //循环调用,嵌套
    	            }))
  		} catch (err) {
    		    return Promise.reject(err)
  		}}}
	}复制代码

koa-router            路由

const about = ctx => {
  ctx.response.type = 'html';
  ctx.response.body = '<a href="/">Index Page</a>';
};

const main = ctx => {
  ctx.response.body = 'Hello World';
  ctx.response.redirect('/');                              //路由重定向
};

app.use(route.get('/', main));
app.use(route.get('/about', about));复制代码

装饰器---实现路由模块拆分

class Boy{
    @speak('what')
    run() {
        console.log('do something beore')    
    }
}
function speak(dosomething){
    return function(target,key,descriptor){    //target被装饰的类,key修饰的方法,descriptor详细配置
        console.log(target)
        console.log(key)
        console.log(descriptor)

        target.dosomething= dosomething
        return descriptor
    }
}
const mark = new Boy()
mark.run()

--------
@controller('/api/v0/movies')
export class movieController{
    @get('/:id')
    @amin(['adminWebsit'])            //检查是否有管理员权限
    async getMovieDetail(ctx,next){
        ...
    }
}复制代码

koa-static           静态资源

const path = require('path');
const serve = require('koa-static');

const main = serve(path.join(__dirname));
app.use(main);复制代码

cookie          ****用法:服务端设置ctx.cookie

const main = function(ctx) {
  const n = Number(ctx.cookies.get('view') || 0) + 1;      //改变数据
  ctx.cookies.set('view', n);                              //,数据变化
  ctx.response.body = n + ' views';                        //每次展示cookie的时候

}复制代码

koa-body表单

const koaBody = require('koa-body');

const main = async function(ctx) {
  const body = ctx.request.body;
  if (!body.name) ctx.throw(400, '.name required');
  ctx.body = { name: body.name };
};

app.use(koaBody());


执行:  curl -X POST --data "name=Jack" 127.0.0.1:3000   
        上传数据name=Jack到127.0.0::3000地址处
//显示    {"name":"Jack"}            复制代码

文件上传

const os = require('os');
const path = require('path');
const koaBody = require('koa-body');

const main = async function(ctx) {
  const tmpdir = os.tmpdir();                            //拿到当前根目录
  const filePaths = [];
  const files = ctx.request.body.files || {};            //拿到要上传的文件

  for (let key in files) {                               //文件遍历 
    const file = files[key];
    const filePath = path.join(tmpdir, file.name);
    const reader = fs.createReadStream(file.path);
    const writer = fs.createWriteStream(filePath);
    reader.pipe(writer);                                 //文件遍历   写入
    filePaths.push(filePath);                            //输出到filePath
  }

  ctx.body = filePaths;
};

app.use(koaBody({ multipart: true }));


执行:
$ curl --form upload=@/path/to/file http://127.0.0.1:3000
显示: ["/tmp/file"]

复制代码

session

const Koa = require('koa')
const logger = require('koa-logger')
const session = require('koa-session')
const app = new Koa()

app.key= ['Hi Luke']                    //

app.use(logger())
app.use(session(app))                   //这儿省略用了默认config,重要参数

app.listen(2333)复制代码


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值