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

資訊專欄INFORMATION COLUMN

iKcamp|基于Koa2搭建Node.js實戰(zhàn)(含視頻)? 解析JSON

mudiyouyou / 1168人閱讀

視頻地址:https://www.cctalk.com/v/15114923886141

JSON 數(shù)據(jù)
我顛倒了整個世界,只為擺正你的倒影。

前面的文章中,我們已經(jīng)完成了項目中常見的問題,比如 路由請求結(jié)構(gòu)分層視圖渲染靜態(tài)資源等。
那么,JSON 呢?JSON 格式數(shù)據(jù)的傳輸,已經(jīng)深入到了我們的碼里行間,脫離了 JSON 的人想必是痛苦的。那么,復(fù)合吧!

如何設(shè)置 JSON 格式

偉大的武術(shù)家——李小龍先生——說過這樣一段話:

Empty your mind, Be formless,shapeless like water. 
You put water in a cup, it becomes the cup.
You put water in a bottle, it becomes the bottle. 
You put water in a teapot , it becomes the teapot. 
Water can flow or crash. 

翻譯成中文意思就是:

清空你的思想,像水一樣無形。
你將水倒入水杯,水就是水杯的形狀。
你將水倒入瓶子,水就是瓶子的形狀。
你將水倒入茶壺,水就是茶壺的形狀。
你看,水會流動,也會沖擊。

在數(shù)據(jù)傳輸過程中,傳輸?shù)馁Y源都可以稱之為『數(shù)據(jù)』,而『數(shù)據(jù)』之所以展示出不同的形態(tài),是因為我們已經(jīng)設(shè)置了它的格式。

傳輸?shù)臄?shù)據(jù)像是『水』一樣,沒有任何的格式和形狀。

我們的設(shè)置像是『器』一樣,賦予它指定的形態(tài)。

所以,我們只需要設(shè)置把數(shù)據(jù)掛載在響應(yīng)體 body 上,同時告訴客戶端『返回的是 JSON 數(shù)據(jù)』,客戶端就會按照 JSON 來解析了。代碼如下:

ctx.set("Content-Type", "application/json")
ctx.body = JSON.stringify(json)
提取中間件

我們把上面的代碼提取成一個中間件,這樣更方便代碼的維護性和擴展性

增加文件 /middleware/mi-send/index.js

module.exports = () => {
  function render(json) {
      this.set("Content-Type", "application/json")
      this.body = JSON.stringify(json)
  }
  return async (ctx, next) => {
      ctx.send = render.bind(ctx)
      await next()
  }
}

注意: 目錄不存在,需要自己創(chuàng)建。

代碼中,我們把 JSON 數(shù)據(jù)的處理方法掛載在 ctx 對象中,并起名為 send。當我們需要返回 JSON 數(shù)據(jù)給客戶端時候,只需要調(diào)用此方法,并把 JSON 對象作為參數(shù)傳入到方法中就行了,用法如下:

ctx.send({
  status: "success",
  data: "hello ikcmap"
})
應(yīng)用中間件

代碼的實現(xiàn)過程和調(diào)用方法我們已經(jīng)知道了,現(xiàn)在我們需要把這個中間件應(yīng)用在項目中。

增加文件 middleware/index.js,用來集中調(diào)用所有的中間件:

const miSend = require("./mi-send")
module.exports = (app) => {
  app.use(miSend())
}

修改 app.js,增加中間件的引用

const Koa = require("koa")
const path = require("path")
const bodyParser = require("koa-bodyparser")
const nunjucks = require("koa-nunjucks-2")
const staticFiles = require("koa-static")

const app = new Koa()
const router = require("./router")

const middleware = require("./middleware")

middleware(app)

app.use(staticFiles(path.resolve(__dirname, "./public")))

app.use(nunjucks({
  ext: "html",
  path: path.join(__dirname, "views"),
  nunjucksConfig: {
    trimBlocks: true
  }
}));

app.use(bodyParser())
router(app)
app.listen(3000, () => {
  console.log("server is running at http://localhost:3000")
})
中間件遷移

隨著項目的步步完善,將會產(chǎn)生有更多的中間件。我們把 app.js 中的中間件代碼遷移到 middleware/index.js 中,方便后期維護擴展

修改 app.js

const Koa = require("koa")
const app = new Koa()
const router = require("./router")

const middleware = require("./middleware")

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

修改 middleware/index.js

const path = require("path")
const bodyParser = require("koa-bodyparser")
const nunjucks = require("koa-nunjucks-2")
const staticFiles = require("koa-static")

const miSend = require("./mi-send")
module.exports = (app) => {
  app.use(staticFiles(path.resolve(__dirname, "../public")))

  app.use(nunjucks({
    ext: "html",
    path: path.join(__dirname, "../views"),
    nunjucksConfig: {
      trimBlocks: true
    }
  }));

  app.use(bodyParser())
  app.use(miSend())
}

后面我們還會開發(fā)更多的中間件,比如日志記錄、錯誤處理等,都會放在 middleware/ 目錄下處理。

下一篇:記錄日志——開發(fā)日志中間件,記錄項目中的各種形式信息

上一篇:iKcamp新課程推出啦~~~~~iKcamp|基于Koa2搭建Node.js實戰(zhàn)(含視頻)? 處理靜態(tài)資源
推薦: 翻譯項目Master的自述: 1. 干貨|人人都是翻譯項目的Master 2. iKcamp出品微信小程序教學(xué)共5章16小節(jié)匯總(含視頻)

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

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

相關(guān)文章

  • 開始連載啦~每周2更共11堂iKcamp課|基于Koa2搭建Node.js實戰(zhàn)項目教學(xué)(視頻)|

    摘要:玩轉(zhuǎn)同時全面掌握潮流技術(shù)采用新一代的開發(fā)框架更小更富有表現(xiàn)力更健壯。融合多種常見的需求場景網(wǎng)絡(luò)請求解析模板引擎靜態(tài)資源日志記錄錯誤請求處理。結(jié)合語句中轉(zhuǎn)中間件控制權(quán),解決回調(diào)地獄問題。注意分支中的目錄為當節(jié)課程后的完整代碼。 ?? ?與眾不同的學(xué)習(xí)方式,為你打開新的編程視角 獨特的『同步學(xué)習(xí)』方式 文案講解+視頻演示,文字可激發(fā)深層的思考、視頻可還原實戰(zhàn)操作過程。 云集一線大廠...

    B0B0 評論0 收藏0
  • 【完結(jié)匯總】iKcamp出品基于Koa2搭建Node.js實戰(zhàn)共十一堂課(視頻)

    摘要:云集一線大廠有真正實力的程序員團隊云集一線大廠經(jīng)驗豐厚的碼農(nóng),開源奉獻各教程。融合多種常見的需求場景網(wǎng)絡(luò)請求解析模板引擎靜態(tài)資源日志記錄錯誤請求處理。結(jié)合語句中轉(zhuǎn)中間件控制權(quán),解決回調(diào)地獄問題。注意分支中的目錄為當節(jié)課程后的完整代碼。 ?? ?與眾不同的學(xué)習(xí)方式,為你打開新的編程視角 獨特的『同步學(xué)習(xí)』方式 文案講解+視頻演示,文字可激發(fā)深層的思考、視頻可還原實戰(zhàn)操作過程。 云...

    sPeng 評論0 收藏0
  • iKcamp基于Koa2搭建Node.js實戰(zhàn)視頻)? HTTP請求

    POST/GET請求——常見請求方式處理 ?? iKcamp 制作團隊 原創(chuàng)作者:大哼、阿干、三三、小虎、胖子、小哈、DDU、可木、晃晃 文案校對:李益、大力萌、Au、DDU、小溪里、小哈 風采主播:可木、阿干、Au、DDU、小哈 視頻剪輯:小溪里 主站運營:給力xi、xty 教程主編:張利濤 視頻地址:https://www.cctalk.com/v/15114357765870 ...

    張利勇 評論0 收藏0
  • iKcamp團隊制作|基于Koa2搭建Node.js實戰(zhàn)項目教學(xué)(視頻)? 環(huán)境準備

    安裝搭建項目的開發(fā)環(huán)境 視頻地址:https://www.cctalk.com/v/15114357764004 showImg(https://segmentfault.com/img/remote/1460000012470016?w=1214&h=718); 文章 Koa 起手 - 環(huán)境準備 由于 koa2 已經(jīng)開始使用 async/await 等新語法,所以請保證 node 環(huán)境在 7.6...

    bang590 評論0 收藏0
  • iKcamp基于Koa2搭建Node.js實戰(zhàn)視頻)? 錯誤處理

    滬江CCtalk視頻地址:https://www.cctalk.com/v/15114923887518 showImg(https://segmentfault.com/img/remote/1460000013096340?w=1282&h=714); 處理錯誤請求 愛能遮掩一切過錯。 當我們在訪問一個站點的時候,如果訪問的地址不存在(404),或服務(wù)器內(nèi)部發(fā)生了錯誤(500),站點會展示出某...

    leeon 評論0 收藏0

發(fā)表評論

0條評論

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