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

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

作者: 子心_ | 来源:发表于2019-07-10 09:11 被阅读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'>;否则会文件上传失败

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/wtbtkctx.html