Fastify 錯(cuò)誤處理

2020-02-06 15:41 更新

錯(cuò)誤處理

未捕獲的錯(cuò)誤容易引起內(nèi)存泄漏、文件描述符泄漏等生產(chǎn)環(huán)境主要的問題。Node 的 Domain 模塊被設(shè)計(jì)用來解決這一問題,然而效果不佳。事實(shí)上,以合理的方式來處理所有未捕獲的錯(cuò)誤是不可能的,目前,最好的方法就是使程序崩潰。當(dāng)使用 promise 時(shí),請注意正確地處理了錯(cuò)誤。

Fastify 遵循不全則無的原則,旨在精而優(yōu)。因此,確保正確處理錯(cuò)誤成了開發(fā)者要考慮的問題。由于大部分的錯(cuò)誤源于預(yù)期外的輸入,我們建議為輸入的數(shù)據(jù)指明 JSON.schema 驗(yàn)證。

要注意的是,在基于回調(diào)的路由中,F(xiàn)astify 不會幫你捕獲錯(cuò)誤。因此,任何未捕獲的錯(cuò)誤都可能造成崩潰。 但當(dāng)路由被聲明為 async 模式時(shí),錯(cuò)誤會被 promise 安全地捕獲,并通過 Fastify 默認(rèn)的錯(cuò)誤處理器以一般的 Internal Server Error 響應(yīng)發(fā)送給客戶端。要自定義這一行為,請看 setErrorHandler。

Fastify 錯(cuò)誤代碼

FST_ERR_CTP_ALREADY_PRESENT

該 content type 的解析器已經(jīng)被注冊。

FST_ERR_CTP_INVALID_TYPE

Content-Type 應(yīng)為一個(gè)字符串。

FST_ERR_CTP_EMPTY_TYPE

content type 不能是一個(gè)空字符串。

FST_ERR_CTP_INVALID_HANDLER

該 content type 接收的處理函數(shù)無效。

FST_ERR_CTP_INVALID_PARSE_TYPE

提供的待解析類型不支持。只支持 string 和 buffer。

FST_ERR_CTP_BODY_TOO_LARGE

請求 body 大小超過限制。

FST_ERR_CTP_INVALID_MEDIA_TYPE

收到的 media type 不支持 (例如,不存在合適的 Content-Type 解析器)。

FST_ERR_CTP_INVALID_CONTENT_LENGTH

請求 body 大小與 Content-Length 不一致。

FST_ERR_DEC_ALREADY_PRESENT

已存在同名的裝飾器。

FST_ERR_DEC_MISSING_DEPENDENCY

缺失依賴導(dǎo)致裝飾器無法注冊。

FST_ERR_HOOK_INVALID_TYPE

鉤子名稱必須為字符串。

FST_ERR_HOOK_INVALID_HANDLER

鉤子的回調(diào)必須為函數(shù)。

FST_ERR_LOG_INVALID_DESTINATION

日志工具目標(biāo)地址無效。僅接受 'stream' 或 'file' 作為目標(biāo)地址。

FST_ERR_REP_ALREADY_SENT

響應(yīng)已發(fā)送。

FST_ERR_SEND_INSIDE_ONERR

不能在 onError 鉤子中調(diào)用 send。

FST_ERR_REP_INVALID_PAYLOAD_TYPE

響應(yīng) payload 類型無效。只允許 string 或 Buffer。

FST_ERR_SCH_MISSING_ID

提供的 schema 沒有 $id 屬性。

FST_ERR_SCH_ALREADY_PRESENT

同 $id 的 schema 已經(jīng)存在。

FST_ERR_SCH_NOT_PRESENT

不存在 $id 為提供的值的 schema。

FST_ERR_SCH_BUILD

某個(gè)路由的 JSON schema 不合法。

FST_ERR_PROMISE_NOT_FULLFILLED

狀態(tài)碼不為 204 時(shí),Promise 的 payload 不能為 'undefined'。



以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號