100-days-Coding - day9

day9-0812

上次在用form做文件上傳的時(shí)候,自己方便測(cè)試使用koa搭建了一個(gè)臨時(shí)后臺(tái)「其實(shí)很早之前就已經(jīng)接觸了,express的替代者,更輕量化,富中間件化

koa的使用雖然也只是簡單的了解層面,不過還是get到一些不一樣的事情

從一個(gè)簡單的form表單引申出的都有什么呢?

  • koa服務(wù)器的開啟
  • koa的表單處理中間件koa-body
  • promise的使用 - 「是在沒想到koa使用promise到這種地步」
  • async & await - 「老生暢談 - 異步,同步糟心事惹」
  • imdb-api的簡單使用 - 「之前有用unsplashapi做過一個(gè)每日推送美圖的vueapp

細(xì)想一下,哇咔咔,還是有好多新坑需要填。


#1. koa的服務(wù)器開啟

koa作為express的替代者,達(dá)到同樣目的情況下給人一種簡潔的美。

const Koa = require('koa');
const app = new Koa();

const main = ctx => {
    ctx.response.body = 'serer ha, gotcha!'
}

app.use(main)

app.listen(3006, () => {
    console.log('server running ...')
})
  • main作為服務(wù)器相應(yīng)主函數(shù),知道你想使用路由,直接判斷ctx.request.path === your_path就可以啦!- 「原生的哦

  • 當(dāng)然,路由也可以使用中間件koa-route?!敢约喝ゲ榕?!」

#2. koa-body中間件

為了能夠獲取前端傳來的form表單的數(shù)據(jù)你需要獲取post data 或者是get parameters,來進(jìn)行相應(yīng)的處理

const Koa = require('koa');
const koaBody = require('koa-body');
const app = new Koa();


// 文件處理
const main = async function(ctx) {
  const files = ctx.request.body.files // get your files with body.files
};

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

app.listen(3006, () => {
  
    console.log('server running ...')
})
  • 文件的處理需要async的幫助,不止是文件處理,還有其他的異步操作,比如ajax的數(shù)據(jù)請(qǐng)求,原因是「REASON

#3. promise的使用

promise的語法糖真的是好甜!
使用promise的寫法不僅可以更清楚的表達(dá)你的邏輯,更重要的是很

const queryMovie = (movie) => {
    return new Promise((resolve, reject) => {
        imdb.get({
            name: movie
            // id: 'tt3896198'
        }, {
            apiKey: OMDB_KEY_HONGWING,
            timeout: 30000
        }).then((res) => {
            // 數(shù)據(jù)正常就是 resolve
            resolve(res)
        }).catch((e) => {
           // 數(shù)據(jù)異常就是 reject
            reject(e)
        })
    })
    
}
  • 簡單點(diǎn)來說,就是將函數(shù)的執(zhí)行就類似于pipe。倘若達(dá)到你的條件,就會(huì)流向你該條所導(dǎo)向的地方 - 「resolve & reject
  • Note: 經(jīng)常的使用會(huì)有助于你將你的代碼邏輯轉(zhuǎn)向promise,更加清楚真?zhèn)€邏輯流程 「不要強(qiáng)行使用哦!

#4. async & await 再次相遇

F.E.D始終逃不掉的就是異步 & 同步「 REASON 」Javascript with single thread
異步的常見的會(huì)有: 回調(diào)函數(shù),發(fā)布訂閱,時(shí)間驅(qū)動(dòng)處理,和 promise


const movieQuery = async function (ctx) {
    const moviename = ctx.request.url.split('?')[1].split('=')[1]
    await queryMovie(moviename).then((res) => {
        console.log(res)
        ctx.body = res
    }).catch((e) => {
        ctx.body = e
    })
};
  • async表明了函數(shù)是異步執(zhí)行的,這個(gè)異步執(zhí)行的函數(shù)內(nèi)部使用了await表明了需要在執(zhí)行 queryMovie() - ajax時(shí)等一下即同步。
  • Note: 「四種常見的寫法記得去看看哦!

#5. imdb-api 相關(guān)

imdb-api是一個(gè)包,用于獲取imdb提供的電影信息

The ant man
  • 使用比較簡單 擁有一個(gè)omdb_key就可以啦! 「daily 1000 times
  • 可以展開你的想法,「做出好玩的東西哦!

#End preference

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 異步編程對(duì)JavaScript語言太重要。Javascript語言的執(zhí)行環(huán)境是“單線程”的,如果沒有異步編程,根本...
    呼呼哥閱讀 7,400評(píng)論 5 22
  • 原文連接:https://blog.csdn.net/sinat_17775997/article/details...
    小豆soybean閱讀 4,362評(píng)論 0 7
  • async 函數(shù) 含義 ES2017 標(biāo)準(zhǔn)引入了 async 函數(shù),使得異步操作變得更加方便。 async 函數(shù)是...
    huilegezai閱讀 1,313評(píng)論 0 6
  • 框架提出的背景 ES6/7帶來的變革 自ES6確定和ES7中async/await開始普及,Node的發(fā)展變得更加...
    宮若石閱讀 8,706評(píng)論 1 14
  • 懷念深夜里和你聊天最期待的是網(wǎng)頁刷新后,代表有新消息的那個(gè)小紅點(diǎn)有時(shí)候過了三分鐘還不見回應(yīng),想著網(wǎng)絡(luò)是不是出了問題...
    云之鳶閱讀 324評(píng)論 0 0

友情鏈接更多精彩內(nèi)容