Fastify系列【使用初步】

本文僅用來記錄個(gè)人使用過程備忘

安裝

建立項(xiàng)目牲尺,并安裝fastify

Chaim:examp1 Chaim$ npm init
Chaim:examp1 Chaim$ npm install fastify --save

server.js

// Require the framework and instantiate it
const fastify = require('fastify')({ logger: true })

// Declare a route
fastify.get('/', async (request, reply) => {
  return { hello: 'world' }
})

// Run the server!
const start = async () => {
  try {
    await fastify.listen(3000)
    fastify.log.info(`server listening on ${fastify.server.address().port}`)
  } catch (err) {
    fastify.log.error(err)
    process.exit(1)
  }
}
start()

啟動(dòng)服務(wù)

Chaim:examp1 Chaim$ node server
{"level":30,"time":1557508003756,"pid":3401,"hostname":"Chaim.local","msg":"Server listening at http://127.0.0.1:3000","v":1}
{"level":30,"time":1557508003756,"pid":3401,"hostname":"Chaim.local","msg":"server listening on 3000","v":1}

看起來在3000端口監(jiān)聽了地来,瀏覽器打開"http://127.0.0.1:3000/" 戳玫,可以看到返回信息

{"hello":"world"}

日志功能默認(rèn)是關(guān)閉的,測(cè)試?yán)又幸呀?jīng)打開日志功能未斑,如下:

const fastify = require('fastify')({
  logger: true
})

路由

類似以下方式注冊(cè)一個(gè)路由

fastify.route({
  method: 'POST',
  url: '/api/log/jsons',
  handler: (req, res) => {
    req.body.on('data', d => console.log(d)) // log every incoming object
  }
})

method

支持的method:'DELETE', 'GET', 'HEAD', 'PATCH', 'POST', 'PUT' 和 'OPTIONS'咕宿。

url

url支持格式:https://github.com/delvedor/find-my-way#supported-path-formats

schema

一個(gè)包含請(qǐng)求和響應(yīng)模式的對(duì)象。

需要符合 JSON Schema 的格式蜡秽。

        schema: {
          description: '管理員登錄',
          tags: ['admin'],
          body: {
           type: 'object',
           properties: {
             username: { type: 'string' },
             password: { type: 'string' },
           }
          }

注意:Fastify 只支持 application/json 內(nèi)容類型府阀,如果想解析其他類型可以查看社區(qū)插件,fastify-formbody 可以解析 x-www-form-urlencoded 請(qǐng)求類型芽突,使用 fastify-multipart 處理 form-data 類型請(qǐng)求试浙。或者使用 ContentTypeParser 方法自定義內(nèi)容類型解析器寞蚌。

Express/Restify

fastify 支持類似 Express/Restify 的路由語法:

  • fastify.get(path, [options], handler)
  • fastify.head(path, [options], handler)
  • fastify.post(path, [options], handler)
  • fastify.put(path, [options], handler)
  • fastify.delete(path, [options], handler)
  • fastify.options(path, [options], handler)
  • fastify.patch(path, [options], handler)
  • fastify.all(path, [options], handler)

如下

    fastify.post('/login', {
        schema: {
          description: '管理員登錄',
          tags: ['admin'],
          body: {
           type: 'object',
           properties: {
             username: { type: 'string' },
             password: { type: 'string' },
           }
          }
        }
    }, login);

生命周期

這個(gè)整理的圖不錯(cuò)田巴,很清晰表達(dá)了整個(gè)過程,抄錄下

Incoming Request (請(qǐng)求到達(dá))
  │
  └─? Instance Logger (實(shí)例化 Logger)
        │
        └─? Routing (路由匹配)
             │
       404 ?─┴─? onRequest Hook (onRequest鉤子)
                  │
        4**/5** ?─┴─? run Middlewares (執(zhí)行中間件)
                        │
              4**/5** ?─┴─? Parsing (解析請(qǐng)求對(duì)象)
                             │
                       415 ?─┴─? Validation (驗(yàn)證)
                                   │
                             400 ?─┴─? preHandler Hook (preHandler鉤子)
                                         │
                               4**/5** ?─┴─? beforeHandler
                                               │
                                     4**/5** ?─┴─? User Handler
                                                     │
                                                     └─? Reply (響應(yīng))
                                                          │ │
                                                          │ └─? Outgoing Response (發(fā)出響應(yīng))
                                                          │
                                                          └─? onResponse Hook (onResponese鉤子

參考

https://www.fastify.io

https://www.fastify.io/ecosystem/

介紹fastify不錯(cuò)的文章
http://lavyun.cn/blog/20171029-Fastify,node

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末挟秤,一起剝皮案震驚了整個(gè)濱河市壹哺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌艘刚,老刑警劉巖管宵,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異昔脯,居然都是意外死亡啄糙,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門云稚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來隧饼,“玉大人,你說我怎么就攤上這事静陈⊙嘌悖” “怎么了?”我有些...
    開封第一講書人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵鲸拥,是天一觀的道長拐格。 經(jīng)常有香客問我,道長刑赶,這世上最難降的妖魔是什么捏浊? 我笑而不...
    開封第一講書人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮撞叨,結(jié)果婚禮上金踪,老公的妹妹穿的比我還像新娘浊洞。我一直安慰自己,他們只是感情好胡岔,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開白布法希。 她就那樣靜靜地躺著,像睡著了一般靶瘸。 火紅的嫁衣襯著肌膚如雪苫亦。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,441評(píng)論 1 310
  • 那天怨咪,我揣著相機(jī)與錄音屋剑,去河邊找鬼。 笑死惊暴,一個(gè)胖子當(dāng)著我的面吹牛饼丘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播辽话,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼卫病!你這毒婦竟也來了油啤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤蟀苛,失蹤者是張志新(化名)和其女友劉穎益咬,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體帜平,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡幽告,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了裆甩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片冗锁。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖嗤栓,靈堂內(nèi)的尸體忽然破棺而出冻河,到底是詐尸還是另有隱情,我是刑警寧澤茉帅,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布叨叙,位于F島的核電站,受9級(jí)特大地震影響堪澎,放射性物質(zhì)發(fā)生泄漏擂错。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一樱蛤、第九天 我趴在偏房一處隱蔽的房頂上張望钮呀。 院中可真熱鬧桃犬,春花似錦、人聲如沸行楞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽子房。三九已至形用,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間证杭,已是汗流浹背田度。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留解愤,地道東北人镇饺。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像送讲,于是被迫代替她去往敵國和親奸笤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

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