h3 打字機
v0.6.0
使用 typebox 和 ajv 對 h3 進行 JSON 模式驗證。
# Using npm
npm install h3-typebox
# Using yarn
yarn install h3-typebox
# Using pnpm
pnpm install h3-typebox
import { createServer } from 'http'
import { createApp } from 'h3'
import { validateBody , validateQuery , Type } from 'h3-typebox'
const app = createApp ( )
app . use ( '/' , async ( event ) => {
// Validate body
const body = await validateBody ( event , Type . Object ( {
optional : Type . Optional ( Type . String ( ) ) ,
required : Type . Boolean ( ) ,
} ) )
// Validate query
const query = validateQuery ( event , Type . Object ( {
required : Type . String ( ) ,
} ) )
} )
createServer ( app ) . listen ( process . env . PORT || 3000 )
請參閱 TypeBox 文件中如何使用Type
定義架構。
您可以在validateBody
或validateQuery
上定義選項物件。目前支援以下選項:
includeAjvFormats: Boolean
某些格式(例如date
、 date-time
或email
在目前 JSONSchema 草案中指定,但預設不包含在 ajv 中,而是由ajv-formats
套件提供。如果需要其中一種格式,您可以在validateBody
或validateQuery
的選項中指定includeAjvFormats: true
如下所示:
// Body
validateBody ( event , schema , { includeAjvFormats : true } )
// Query
validateQuery ( event , schema , { includeAjvFormats : true } )
目前,出於效能和安全原因,僅支援以下擴充格式:
這些可以由自訂架構與Type.Unsafe
方法或內聯架構一起使用:
const bodySchema = Type . Object ( {
optional : Type . Optional ( Type . String ( ) ) ,
dateTime : Type . String ( { format : 'date-time' } )
} )
validateBody ( event , bodySchema , { includeAjvFormats : true } )
pnpm install
安裝依賴項pnpm dev
運行互動式測試用?
根據麻省理工學院許可發布。