Response
在 Handler 中,Response 會被作為參數傳入:
Response結構體封裝了 HTTP 響應的所有組成部分,提供了一套完整的 API 來建構和操作 HTTP 響應- 支援鏈式呼叫風格(如
res.status_code(200).body("Hello")),便於流暢地建構響應 - 核心功能包括:
- 設定狀態碼和請求標頭
- 操作響應體(支援字串、位元組、檔案和串流資料)
- 管理 Cookie
- 多種內容渲染方式
- 該結構體採用可變引用模式,透過
&mut self返回自身引用,使得處理程式能夠方便地建構和自訂 HTTP 響應,滿足各種 Web 服務需求
Response 在伺服器接收到客戶端請求後,任何匹配到的 Handler 和中間件都可以向裡面寫入資料。在某些情況下,比如某個中間件希望阻止後續的中間件和 Handler 執行,您可以使用 FlowCtrl:
寫入內容
向 Response 中寫入資料是非常簡單的:
-
寫入純文字資料
-
寫入 JSON 序列化資料
Warning
Json<T> 會渲染一個完整的 JSON 文件。Salvo 0.94 及之後版本中,渲染 Json 會替換 Response 中已緩衝的回應體位元組,而不是追加到後面。如果需要輸出多條 JSON 記錄,請自行序列化每條記錄並用 write_body 追加,例如產生 NDJSON。
-
寫入 HTML
寫入 HTTP 錯誤
-
使用
render可以向Response寫入詳細錯誤資訊。 -
如果您不需要自訂錯誤資訊,可以直接呼叫
set_http_code。
重新導向到其他URL
- 使用
render方法可以向Response寫入一個重新導向響應,導航到一個新的URL。當你呼叫 Redirect::found 方法時,它會設定 HTTP 狀態碼為 302(Found),表示臨時重新導向。
ResBody
Response 返回的 Body 類型是 ResBody,它是一個列舉,在出錯時被設定為 ResBody::Error ,這裡包含錯誤的資訊,用於延後處理錯誤,StatusError 實際上並沒實作 Writer,目的是讓您可以在 Catcher 中自訂自己的顯示方式。