Fastfiy基礎指南

什麼是 Fastify?

Fastify 是一個高度專一於以最少開銷和強大的插件架構,爲開發人員提供最佳體驗的 Web 框架。git

它受到了 HapiExpress 的啓發,是目前最快的 Node 框架之一。github

Fastify 獨特的將 JSON Schema 應用到請求時的 validation 和響應時的 serialization, 做者寫的 fast-json-stringify 包更是達到了2x faster than JSON.stringify的神奇效果。npm

爲何要使用 Fastify

  • 100% 異步:框架的核心都是用異步代碼實現的
  • 高性能:每秒能夠提供34000個請求
  • 可擴展:Fastify 經過其鉤子插件裝飾器徹底可擴展
  • 基於模式:即便不是強制性的,咱們建議使用 JSON Schema 來驗證路由並序列化輸出
  • 日誌記錄:日誌很是重要,但成本高昂,咱們選擇了最好的記錄器 Pino
  • 對開發者友好:該框架構建很是有表現力,不會犧牲性能和安全性

如何安裝fastify?

使用 npm 安裝:

npm i fastify --save

使用 yarn 安裝:

yarn add fastify

腳手架安裝

全局安裝

npm i fastify-cli -g

進入目錄

cd [myproject]

初始化Fastify腳手架

fastify generate

運行

npm start

如何建立一個簡單的 Fastify 應用?

聲明一個監聽客戶端http://127.0.0.1:3000/的「GET」請求json

Fastify返回 { hello: 'world' }api

// 加載框架並新建實例
const fastify = require('fastify')({
  // 開始日誌記錄
  logger: true
})

// 聲明路由
fastify.get('/', function(request, reply) {
  reply.send({ hello: 'world' })
})

// 啓動服務!
fastify.listen(3000, function(err, address) {
  if (err) {
    fastify.log.error(err)
    process.exit(1)
  }
  fastify.log.info(`server listening on ${address}`)
})

-n-安全

咱們還能夠利用async/await特性,講Fastify進行異步操做

const fastify = require('fastify')()

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

const start = async () => {
  try {
    await fastify.listen(3000)
  } catch (err) {
    fastify.log.error(err)
    process.exit(1)
  }
}
start()

就如同在 JavaScript 中一切皆爲對象,在 Fastify 中,一切都是插件 (plugin)。

新建一個基礎的插件服務器

// my-first-pugin.js
async function routes (fastify, options) {
  fastify.get('/', async (request, reply) => {
    return { hello: 'world' }
  })
}

module.exports = routes

在服務器上註冊這個插件架構

const fastify = require('fastify')()

// 註冊插件
fastify.register(require('./our-first-route'))
// 監聽3000端口號,啓動
fastify.listen(3000, function (err, address) {
  if (err) {
    fastify.log.error(err)
    process.exit(1)
  }
  fastify.log.info(`server listening on ${address}`)
})

爲了優化解析 JSON 與序列化 JSON 輸出的過程,Fastify 能夠序列化數據

咱們能夠在schema的選項中設置 response 的值,可以加快 JSON 的序列化框架

約束200狀態碼的response的數據格式
const opts = {
  schema: {
    response: {
      200: {
        type: 'object',
        properties: {
          hello: { type: 'string' }
        }
      }
    }
  }
}
fastify.get('/', opts, async (request, reply) => {
  return { hello: 'world' }
})
相關文章
相關標籤/搜索