KOA (破坏式框架)/form表单,文件上传

2019-07-10  本文已影响0人  子心_

KOA (破坏式框架)

    KOA v1 支持generator
    KOA v2 过度版本,支持generator/async
    KOA v3 支持async,(未发布,2018-4-13)
    KOA 升级问题,部分中间件不随KOA升级
    KOA 自带对cookie的控制,不带对session的控制
    KOA 强依赖router
    //koa安装
    //koa(主文件) koa-static(控制静态文件,被koa-static-cache代替) koa-better-body(控制post数据) koa-convert(控制不随koa升级的中间件) koa-router(路由)
    //koa-mysql(未更新,被mysql-pro代替) koa-pug koa-ejs
    cnpm i koa koa-static koa-better-body koa-convert koa-router -D
    //koa使用--创建服务器(koa)与使用路由(koa-router)
        const koa = require('koa');
        const router = require('koa-router');
        let server = new koa();
        server.listen(8087);
        //KOA 强依赖router 必须使用路由
        let r1 = router();//koa-router
        server.use(r1.routes());//调用路由必须使用routes()函数
        //r1路由有get\post\put\delete等等等等函数,koa3的路由函数中回调函数为async函数,koa1为function函数
        r1.get('/a',async (ctx,next)=>{
            //ctx中有node原生属性跟koa封装的属性
            //ctx.req node原生的
            //ctx.request koa封装的
            //ctx.res
            //ctx.response
            console.log(ctx);
            ctx.response.body={a:12,b:33};//使用响应体,直接向浏览器返回内容
            ctx.response.set('header','aaaaa');//设置特定的响应头
            ctx.response.status=403;//设置响应码
            console.log(ctx.request.headers);//获取求情头request里有method,url,header,query等属性
        });
    //koa使用--静态文件(koa-static),(koa-static-cache)
        //koa-static缺点,会将文件原样发送,而不是进行压缩,所以使用koa-static-cache代替,koa-static-cache会进行压缩与缓存
        const koa = require('koa');
        //const static = require('koa-static');
        const static = require('koa-static-cache');
        const pathlib = require('path');//用来将路径改为绝对路径,方便日后更新路径
        let server = new koa();
        server.listen(8087);

        //pathlib.resolve(),绝对路径,参数可以有多个以逗号分隔,以表示多层文件夹,支持./,../。例:pathlib.resolve('aa','cc');指向当前文件所在的绝对路径盘符/aa/cc;
        server.use(static(pathlib.resolve('www')));//访问localhost:8087/1.html;就会到绝对路径下的www文件夹下去找1.html
    //koa使用--获取get数据
        const koa = require('koa');
        const router = require('koa-router')
        let server = new koa();
        server.listen(8087);

        let r1 = router();
        server.use(r1.routes());

        r1.get('/api/:name',async (ctx)=>{
            console.log(ctx.params);//localhost:8087/api/aa;路由参数获取,此处获取{name:'aa'}
            console.log(ctx.request.query);//localhost:8087/api/aa?b=555;get方法的参数获取url?后面的数据{b:'555'}
            ctx.response.body='aaa';//返回响应
        })
    //koa使用--获取post数据('koa-better-body')--使用convert更新中间件
        const koa = require('koa');
        const betterBody = require('koa-better-body');
        const convert = require('koa-convert');
        const pathlib = require('path');

        let server = new koa();
        server.listen(8087);
        //使用convert 来解决koa升级带来的中间件版本太旧问题
        server.use(convert(betterBody({
            uploadDir:pathlib.resolve('./upload'),//指定文件上传后存储的位置,betterBody默认会上传到系统的C盘临时文件存放处
            keepExtendsions:true,//保持文件扩展名
        })));

        server.use(async ctx=>{
            console.log(ctx.request.fields);//获取普通数据+部分文件数据信息
            console.log(ctx.request.files);//获取文件数据,form表单需要开启<form enctype='multipart/form-data'>;否则会文件上传失败;
        })
    //koa使用--进行cookie与session的用法
    //cookie
        const koa = require('koa');
        let server = new koa();
        server.listen(8087);
        server.use(async (ctx)=>{
            console.log(ctx.cookies.get('a'));//获取前台发送的cookie a=12
            //向前台发送的cookie b=5
            ctx.cookies.set('b',5,{
                maxAge:86400*1000,//有效时长一天
                // domain:'localhost', // 写cookie所在的域名
                // path:'/',       // 写cookie所在的路径
                // maxAge: 2*60*60*1000,   // cookie有效时长
                // expires:new Date('2018-02-08'), // cookie失效时间
                // httpOnly:false,  // 是否只用于http请求中获取
                // overwrite:false  // 是否允许重写
            });
            ctx.response.body='a'
        })
    //session
        const koa = require('koa');
        const koaSeeion = require('koa-session');
        let server = new koa();
        server.listen(8087);
        server.keys=['key1','key2','key3'];//滚动密钥,koa强制使用秘钥,增强安全性,通常将这个key放到一个单独的文件中使用模块抛出,此处引入模块以保证安全性
        server.use(koaSeeion({},server));//koa-session使用需要将server实例发给koaSession,哎,这就很烦。
        server.use(async (ctx)=>{
            if(ctx.session['count']){
                ctx.session['count']++;//设置session中的count,发送给浏览器
            }
            console.log(ctx.session['count']);//获取session中的count
        });
    //koa使用pug,语法同4-10笔记pug
        const koa = require('koa');
        const Pug = require('koa-pug');
        const pathlib = require('path');
        let server = new koa();
        server.listen(8087);

        let pug = new Pug({//舒适化pug
            viewPath:pathlib.resolve('template/pug'),//存放文件的路径
            app:server,//使用服务器
        });
        server.use(async ctx=>{
            await ctx.render('1',{a:12})//模板文件以及模板使用数据;
        }) 
    //koa使用ejs,语法同4-10笔记ejs
        const koa = require('koa');
        const Ejs = require('koa-ejs');
        const pathlib = require('path');
        let server = new koa();
        server.listen(8087);
        Ejs(server,{
            root:pathlib.resolve('template/ejs'),
            layout:false,
            viewExt:'ejs'//模板文件后缀名
        })
        server.use(async ctx=>{
            await ctx.render('1',{a:12,name:'blue'})//模板文件以及模板使用数据;
        })
    //koa使用数据库(koa-mysql,见4-14)



扩展

form表单,文件上传
    form表单上传文件数据时需要开启<form enctype='multipart/form-data'>;否则会文件上传失败
上一篇下一篇

猜你喜欢

热点阅读