回應與 SSE
最後更新
HakoRun 如何把函式輸出轉成 JSON 回應,以及串流模式的事件格式。
型別標註
非串流模式回傳 {"data": ..., "type": ...}。結果取自 stdout 由下往上第一行合法 JSON;沒有合法 JSON 時,取過濾掉 Node.js 警告(Warning:、ExperimentalWarning 等)後的全部輸出。
type |
條件 | 範例 data |
|---|---|---|
string |
JSON 字串 | "done" |
number |
JSON 數值 | 8 |
json |
JSON 物件、陣列、布林或 null |
{"sum": 30} |
text |
不是合法 JSON | hello world |
SSE 事件
stream: true 時回應標頭為 text/event-stream,每則事件為一行 data: <JSON>:
data: {"event":"log","data":0,"type":"number"}
data: {"event":"result","data":"done","type":"string"}
event |
送出時機 |
|---|---|
log |
stdout 每一行在下一行出現時送出 |
result |
行程正常結束,內容為 stdout 最後一行 |
error |
stderr 有輸出、逾時、客戶端斷線或非零退出碼 |
每則事件的 type 依上表規則判斷;result/error 內的換行字元會被替換成空白。
結束與中止
- 送出
result或error後,伺服器 hijack 並關閉連線。 - stderr 的第一行輸出即觸發終止,
error內容為stopped to run script: <該行>。 - 客戶端斷線時,
error為stopped to run script: client disconnected(客戶端不會收到)。