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

資訊專欄INFORMATION COLUMN

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

mudiyouyou / 1165人閱讀

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

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

前面的文章中,我們已經(jīng)完成了項(xiàng)目中常見的問題,比如 路由請(qǐ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. 

翻譯成中文意思就是:

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

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

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

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

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

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

我們把上面的代碼提取成一個(gè)中間件,這樣更方便代碼的維護(hù)性和擴(kuò)展性

增加文件 /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 對(duì)象中,并起名為 send。當(dāng)我們需要返回 JSON 數(shù)據(jù)給客戶端時(shí)候,只需要調(diào)用此方法,并把 JSON 對(duì)象作為參數(shù)傳入到方法中就行了,用法如下:

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

代碼的實(shí)現(xiàn)過程和調(diào)用方法我們已經(jīng)知道了,現(xiàn)在我們需要把這個(gè)中間件應(yīng)用在項(xià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")
})
中間件遷移

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

修改 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())
}

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

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

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

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

    leeon 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<