国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

【從前端到全?!? koa快速入門指南

鄒強 / 1081人閱讀

摘要:前言隨著技術(shù)的不斷發(fā)展,前端工程師也被賦予了越來越多的職責(zé)。接下來這篇文章,完成一個簡單的登錄注冊,能讓你快速上手,成為一個小全棧工程師,快速開始安裝因為已經(jīng)完全支持語法,所以請保證的版本在以上推薦一個的多版本管理工具。

前言

隨著技術(shù)的不斷發(fā)展,前端工程師也被賦予了越來越多的職責(zé)。不再是從前只需要切個圖,加個css樣式就能完成任務(wù)的切圖仔了。接下來這篇文章,完成一個簡單的登錄注冊,能讓你快速上手,成為一個‘小全棧工程師’,here we go !

koa快速開始 安裝

因為node.js v7.6.x已經(jīng)完全支持async/await語法,所以請保證node的版本在7.6以上

推薦一個node的多版本管理工具:nvm。如何安裝這里不再贅述,網(wǎng)上的教程有很多

https://github.com/creationix...

// 初始化package.json
npm init

// 安裝koa2 
npm install koa
一個hello world

新建一個index.js,敲上以下代碼

//index.js

const Koa = require("koa")
const app = new Koa()

app.use( async (ctx, next) => {
  ctx.response.body = "你好,我是內(nèi)地吳彥祖"
})

app.listen(3333, ()=>{
  console.log("server is running at http://localhost:3333")
})

在我們的命令行敲上

node index.js

就可以看到運行結(jié)果啦:

幾個核心概念 中間件好基友ctx和next

在上面的代碼中,我們可以看到app.use后面使用了2個參數(shù),ctxnext,下面我們介紹一個這哥倆到底干嘛的

ctx

ctx作為上下文使用,Koa將 node 的 request, response 對象封裝進一個多帶帶對象。即ctx.request 、 ctx.response。Koa 內(nèi)部又對一些常用的屬性或者方法做了代理操作,使得我們可以直接通過 ctx 獲取。比如,ctx.request.url 可以寫成 ctx.url。

next

next 參數(shù)的作用是將處理的控制權(quán)轉(zhuǎn)交給下一個中間件

經(jīng)典的洋蔥圖概念能很好的解釋next的執(zhí)行,請求從最外層進去,又從最里層出來。我們看一個例子

const Koa = require("koa")
const app = new Koa()

app.use(async (ctx, next)=>{
  let startTime = new Date().getTime()
  await next()
  let endTime = new Date().getTime()
  console.log(`此次的響應(yīng)時間為:${endTime - startTime}ms`)
})

app.use(async (ctx, next) => {
  console.log("111, 然后doSomething")
  await next()
  console.log("111 end")
})

app.use(async (ctx, next) => {
  console.log("222, 然后doSomething")
  await next()
  console.log("222 end")
})

app.use(async (ctx, next) => {
  console.log("333, 然后doSomething")
  await next()
  console.log("333 end")
})

app.listen(3333, ()=>{
  console.log("server is running at http://localhost:3333")
})

看一下運行結(jié)果:

如果將‘222’函數(shù)的next()去掉的話,會發(fā)生什么呢?

可以看到,后面的‘333’中間件直接不執(zhí)行了。所以中間件的順序?qū)ext的執(zhí)行有很大的影響

路由 koa-router

我們常用koa-router來處理URL

安裝

npm i koa-router --save

看一個例子:

const Koa = require("koa")
const app = new Koa()
const Router = require("koa-router")

const router = new Router()

router.get("/", async (ctx, next) => {
  ctx.body = "你好,我這里是index頁"
})

router.get("/user", async (ctx, next) => {
  ctx.body = "你好,我這里是user頁"
})

router.get("/error", async (ctx, next) => {
  ctx.body = "你好,我這里是error頁"
})

app.use(router.routes())

app.listen(3333, ()=>{
  console.log("server is running at http://localhost:3333")
})


koa-router也支持嵌套寫法,通過一個總路由裝載所有子路由,也非常的方便??匆粋€例子:

const Koa = require("koa")
const app = new Koa()
const Router = require("koa-router")

// 子路由1
let oneRouter = new Router()

oneRouter.get("/", async (ctx, next) => {
  ctx.body = "你好,我這里是oneRouter頁"
})

// 子路由2
let twoRouter = new Router()

twoRouter.get("/", async (ctx, next) => {
  ctx.body = "你好, 我這里是twoRouter頁"
}).get("/home", async (ctx , next) => {
  ctx.body = "你好, 我這里是home頁"
})

// 裝載所有子路由
let indexRouter = new Router()

indexRouter.use("/one",oneRouter.routes(), oneRouter.allowedMethods())
indexRouter.use("/two",twoRouter.routes(), twoRouter.allowedMethods())

app
  .use(indexRouter.routes())
  .use(indexRouter.allowedMethods())

app.listen(3333, ()=>{
  console.log("server is running at http://localhost:3333")
})

看一下運行結(jié)果:



獲取請求數(shù)據(jù)

koa-router提供了常見的 .get .put .post .del 接口來處理各種需求。實際開發(fā)中我們用的比較多的是get和post,我們來看看get例子:

const Koa = require("koa")
const app = new Koa()
const Router = require("koa-router")
const router = new Router()

router.get("/data", async (ctx , next)=> {
  let url = ctx.url

  // 從ctx的request中拿到我們想要的數(shù)據(jù)
  let data = ctx.request.query
  let dataQueryString = ctx.request.querystring

  ctx.body = {
    url,
    data,
    dataQueryString
  }
})

app.use(router.routes())

app.listen(3333, ()=>{
  console.log("server is running at http://localhost:3333")
})

在瀏覽器里輸入http://localhost:3333/data?user=wuyanzu&id=123456 ,可以看到運行結(jié)果

可以看到區(qū)別,.query返回的結(jié)果是對象,而.querystring返回的是字符串,這個很好理解。(chrome插件顯示成json格式)

如果遵從 RESTful 規(guī)范,比如請求要以 "/user/:id"的方式發(fā)出的話,我們可以用下面的例子來獲取到想要的數(shù)據(jù)

添加代碼

router.get("/data/:id", async (ctx, next) => {

  // 也從ctx中拿到我們想要的數(shù)據(jù),不過使用的是params對象
  let data = ctx.params

  ctx.body = data
})

瀏覽器運行 http://localhost:3333/data/4396 看到結(jié)果

接下來我們看看post的例子

我們常用的請求post,它的數(shù)據(jù)是放在body當(dāng)中的。這個時候就推薦一個非常常用且好用的中間件-koa-bodyparser

首先安裝

npm i koa-bodyparser --save

然后我們在剛才的代碼里添加

router.get("/post", async (ctx, next) => {
    // 模擬一段提交頁面
  let html = `    
    

你長的最像哪位明星


輸入一段你知道的車牌號


` ctx.body = html }) router.post("/post/result", async (ctx, next) => { // 我們可以從ctx的request.body拿到提交上來的數(shù)據(jù) let {name, num} = ctx.request.body if (name && num) { ctx.body = `hello,你最像的明星是:${name},ch你知道的車牌號是:${num}` } else { ctx.body = "啊哦~你填寫的信息有誤" } })

看一下運行結(jié)果

cache

koa操作cookie是非常方便的,也是從上下文ctx中獲取。

ctx.cookies.get(name, [options]) 讀取上下文請求中的cookie

ctx.cookies.set(name, value, [options]) 在上下文中寫入cookie

在我們剛才的post請求的代碼中加入:

router.post("/post/result", async (ctx, next) => {
  // 我們可以從ctx的request.body拿到提交上來的數(shù)據(jù)
  let {name, num} = ctx.request.body

  if (name && num) {
    ctx.body = `hello,你最像的明星是:${name},ch你知道的車牌號是:${num}`
    ctx.cookies.set(
      "xunleiCode",num,
      {
        domain: "localhost",  // 寫cookie所在的域名
        path: "/post/result",       // 寫cookie所在的路徑
        maxAge: 10 * 60 * 1000, // cookie有效時長
        expires: new Date("2018-09-17"),  // cookie失效時間
        httpOnly: false,  // 是否只用于http請求中獲取
        overwrite: false  // 是否允許重寫
      }
    )
  } else {
    ctx.body = "啊哦~你填寫的信息有誤"
  }

})

看一下運行結(jié)果:

koa操作session的話,需要用到koa-session,

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/98481.html

相關(guān)文章

  • FEer全棧開發(fā)

    摘要:代碼開發(fā)記得曾經(jīng)聽開發(fā)平臺的同學(xué)驕傲的講,中只有百度有全公司級別的統(tǒng)一代碼倉庫,并且使用管理代碼,不明覺厲,我也很驕傲。 前言 從前,一個類B/S架構(gòu)的應(yīng)用里,F(xiàn)Eer,或者叫切圖仔,切圖+表單驗證就是工作的全部。無奈我所做的全部,只是整個應(yīng)用的冰山一角...責(zé)任小了,邊緣感就強了,owner意識自然差,視野自然受限。 感謝V8引擎的極速體驗&chrome瀏覽器的緊隨規(guī)范,js執(zhí)行速度...

    elina 評論0 收藏0
  • 前端學(xué)習(xí)資源整理

    稍微整理了一下自己平時看到的前端學(xué)習(xí)資源,分享給大家。 html MDN:Mozilla開發(fā)者網(wǎng)絡(luò) SEO:前端開發(fā)中的SEO css 張鑫旭:張鑫旭的博客 css精靈圖:css精靈圖實踐 柵格系統(tǒng):詳解CSS中的柵格系統(tǒng) 媒體查詢:css媒體查詢用法 rem布局:手機端頁面自適應(yīng)布局 移動前端開發(fā)之viewport的深入理解:深入理解viewport 淘寶前端布局:手機淘寶移動端布局 fl...

    siberiawolf 評論0 收藏0
  • node技術(shù)棧 - 收藏集 - 掘金

    摘要:異步最佳實踐避免回調(diào)地獄前端掘金本文涵蓋了處理異步操作的一些工具和技術(shù)和異步函數(shù)。 Nodejs 連接各種數(shù)據(jù)庫集合例子 - 后端 - 掘金Cassandra Module: cassandra-driver Installation ... 編寫 Node.js Rest API 的 10 個最佳實踐 - 前端 - 掘金全文共 6953 字,讀完需 8 分鐘,速讀需 2 分鐘。翻譯自...

    王偉廷 評論0 收藏0
  • 【全文】狼叔:如何正確的學(xué)習(xí)Node.js

    摘要:感謝大神的免費的計算機編程類中文書籍收錄并推薦地址,以后在倉庫里更新地址,聲音版全文狼叔如何正確的學(xué)習(xí)簡介現(xiàn)在,越來越多的科技公司和開發(fā)者開始使用開發(fā)各種應(yīng)用。 說明 2017-12-14 我發(fā)了一篇文章《沒用過Node.js,就別瞎逼逼》是因為有人在知乎上黑Node.js。那篇文章的反響還是相當(dāng)不錯的,甚至連著名的hax賀老都很認(rèn)同,下班時讀那篇文章,竟然坐車的還坐過站了。大家可以很...

    Edison 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<