KOA (破壞式框架)/form表單,文件上傳

KOA (破壞式框架)

    KOA v1 支持generator
    KOA v2 過度版本,支持generator/async
    KOA v3 支持async,(未發(fā)布,2018-4-13)
    KOA 升級問題,部分中間件不隨KOA升級
    KOA 自帶對cookie的控制,不帶對session的控制
    KOA 強(qiáng)依賴router
    //koa安裝
    //koa(主文件) koa-static(控制靜態(tài)文件,被koa-static-cache代替) koa-better-body(控制post數(shù)據(jù)) 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使用--創(chuàng)建服務(wù)器(koa)與使用路由(koa-router)
        const koa = require('koa');
        const router = require('koa-router');
        let server = new koa();
        server.listen(8087);
        //KOA 強(qiáng)依賴router 必須使用路由
        let r1 = router();//koa-router
        server.use(r1.routes());//調(diào)用路由必須使用routes()函數(shù)
        //r1路由有g(shù)et\post\put\delete等等等等函數(shù),koa3的路由函數(shù)中回調(diào)函數(shù)為async函數(shù),koa1為function函數(shù)
        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};//使用響應(yīng)體,直接向瀏覽器返回內(nèi)容
            ctx.response.set('header','aaaaa');//設(shè)置特定的響應(yīng)頭
            ctx.response.status=403;//設(shè)置響應(yīng)碼
            console.log(ctx.request.headers);//獲取求情頭request里有method,url,header,query等屬性
        });
    //koa使用--靜態(tài)文件(koa-static),(koa-static-cache)
        //koa-static缺點(diǎn),會將文件原樣發(fā)送,而不是進(jìn)行壓縮,所以使用koa-static-cache代替,koa-static-cache會進(jìn)行壓縮與緩存
        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(),絕對路徑污它,參數(shù)可以有多個以逗號分隔,以表示多層文件夾,支持./,../拼苍。例:pathlib.resolve('aa','cc');指向當(dāng)前文件所在的絕對路徑盤符/aa/cc;
        server.use(static(pathlib.resolve('www')));//訪問localhost:8087/1.html;就會到絕對路徑下的www文件夾下去找1.html
    //koa使用--獲取get數(shù)據(jù)
        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;路由參數(shù)獲取,此處獲取{name:'aa'}
            console.log(ctx.request.query);//localhost:8087/api/aa?b=555;get方法的參數(shù)獲取url?后面的數(shù)據(jù){b:'555'}
            ctx.response.body='aaa';//返回響應(yīng)
        })
    //koa使用--獲取post數(shù)據(jù)('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默認(rèn)會上傳到系統(tǒng)的C盤臨時文件存放處
            keepExtendsions:true,//保持文件擴(kuò)展名
        })));

        server.use(async ctx=>{
            console.log(ctx.request.fields);//獲取普通數(shù)據(jù)+部分文件數(shù)據(jù)信息
            console.log(ctx.request.files);//獲取文件數(shù)據(jù),form表單需要開啟<form enctype='multipart/form-data'>;否則會文件上傳失敗;
        })
    //koa使用--進(jìn)行cookie與session的用法
    //cookie
        const koa = require('koa');
        let server = new koa();
        server.listen(8087);
        server.use(async (ctx)=>{
            console.log(ctx.cookies.get('a'));//獲取前臺發(fā)送的cookie a=12
            //向前臺發(fā)送的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強(qiáng)制使用秘鑰,增強(qiáng)安全性,通常將這個key放到一個單獨(dú)的文件中使用模塊拋出,此處引入模塊以保證安全性
        server.use(koaSeeion({},server));//koa-session使用需要將server實例發(fā)給koaSession,哎,這就很煩践啄。
        server.use(async (ctx)=>{
            if(ctx.session['count']){
                ctx.session['count']++;//設(shè)置session中的count,發(fā)送給瀏覽器
            }
            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,//使用服務(wù)器
        });
        server.use(async ctx=>{
            await ctx.render('1',{a:12})//模板文件以及模板使用數(shù)據(jù);
        }) 
    //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'})//模板文件以及模板使用數(shù)據(jù);
        })
    //koa使用數(shù)據(jù)庫(koa-mysql,見4-14)



擴(kuò)展

form表單,文件上傳
    form表單上傳文件數(shù)據(jù)時需要開啟<form enctype='multipart/form-data'>;否則會文件上傳失敗
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末非凌,一起剝皮案震驚了整個濱河市湘今,隨后出現(xiàn)的幾起案子岔擂,更是在濱河造成了極大的恐慌病苗,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挠阁,死亡現(xiàn)場離奇詭異宾肺,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)侵俗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進(jìn)店門爱榕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人坡慌,你說我怎么就攤上這事≡迦” “怎么了洪橘?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長棵帽。 經(jīng)常有香客問我熄求,道長,這世上最難降的妖魔是什么逗概? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任弟晚,我火速辦了婚禮,結(jié)果婚禮上逾苫,老公的妹妹穿的比我還像新娘卿城。我一直安慰自己,他們只是感情好铅搓,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布瑟押。 她就那樣靜靜地躺著,像睡著了一般星掰。 火紅的嫁衣襯著肌膚如雪多望。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天氢烘,我揣著相機(jī)與錄音怀偷,去河邊找鬼。 笑死播玖,一個胖子當(dāng)著我的面吹牛椎工,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼晋渺,長吁一口氣:“原來是場噩夢啊……” “哼镰绎!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起木西,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤畴栖,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后八千,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吗讶,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年恋捆,在試婚紗的時候發(fā)現(xiàn)自己被綠了照皆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡沸停,死狀恐怖膜毁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情愤钾,我是刑警寧澤瘟滨,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站能颁,受9級特大地震影響杂瘸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜伙菊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一败玉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧镜硕,春花似錦运翼、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至念恍,卻和暖如春六剥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背峰伙。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工疗疟, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瞳氓。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓策彤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子店诗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1.簡書 koa是由Express原班人馬打造裹刮,致力于成為一個更小、更富有表現(xiàn)力庞瘸、更健壯的Web框架捧弃。使用koa編...
    不去解釋閱讀 2,666評論 0 11
  • 該來的總會來 咱不急
    keshichen閱讀 170評論 0 0
  • 做你當(dāng)下可以做违霞、該做的,踏實的生活瞬场,心存善念买鸽!生活就是你的道場!所有的經(jīng)歷都是你的壇城贯被!而能夠從這些瑣碎的生活中活...
    三十七度光閱讀 272評論 0 1
  • 一天只看一篇文章有時候只會盯著一句話反復(fù)的看不是因為懶而是道理太多懂一個就好眼五。 晚安!世界彤灶!陌生人弹砚!
    九月寂地閱讀 75評論 0 1
  • 昨晚馬桶就堵了,老公很無奈枢希,說要去請人來疏通。我想現(xiàn)在網(wǎng)上什么都有朱沃,何不先問問度娘苞轿? 一大早起來,我就開始按照網(wǎng)上...
    愜意小魚閱讀 259評論 0 1