首頁  >  文章  >  web前端  >  簡單對比Node的setHeader和writeHead,聊差異

簡單對比Node的setHeader和writeHead,聊差異

青灯夜游
青灯夜游轉載
2022-03-23 20:04:102546瀏覽

Nodejs中setHeader和writeHead有什麼差別?以下這篇文章給大家對比setHeader和writeHead,聊聊它們的差別,希望對大家有幫助!

簡單對比Node的setHeader和writeHead,聊差異

今天在學習Node#的時候發現Node/http中的setHeaderwriteHead很相似,都可以設定回應頭部,我們來詳細的說說吧!

setHeader

參數

#
response.setHeader(name, value)复制代码
  • name  屬性
  • value  屬性值
  • 傳回http.ServerResponse 傳回回應物件

#作用

為回應頭部設定單一屬性。

注意

  • 只能一個一個設定屬性
  • 重複設定一個屬性會取代先前的設定
  • 設定包含無效字元的屬性欄位名稱或值將導致拋出TypeError

範例

reponse.setHeader('Content-Type', 'text/html')
reponse.setHeader('Set-Cookie', ['type=ninja', 'language=javascript'])

重複設定一個屬性

// 返回 content-type = text/html1
reponse.setHeader('Content-Type', 'text/html')
reponse.setHeader('Content-Type', 'text/html1')

簡單對比Node的setHeader和writeHead,聊差異

writeHead

參數

response.writeHead(statusCode, [statusMessage], [headers])
  • statusCode  http狀態碼

  • statusMessage  狀態資訊(可選)

  • #headers | 屬性物件或陣列(可選)

  • 返回http.ServerResponse 傳回回應物件

簡單對比Node的setHeader和writeHead,聊差異

  • #作用

setHeader作用相同

##注意

##可以設定多個屬性,setHeader只能設定一個

只能呼叫一次

必須在response.end ()先前呼叫

設定包含無效字元的屬性欄位名稱或值將導致拋出

TypeError

##範例

因為writeHead回傳的是一個ServerResponse對象,我們可以進行鍊式呼叫<pre class="brush:js;toolbar:false">const body = &amp;#39;hello world&amp;#39;; response .writeHead(200, { &amp;#39;Content-Length&amp;#39;: Buffer.byteLength(body), &amp;#39;Content-Type&amp;#39;: &amp;#39;text/plain&amp;#39; }) .end(body);</pre>這裡的Content-Length是以位元組為單位,而不是字元。 Buffer.byteLength()就是來決定正文的長度。 Nodejs不會檢查Content-Length和已經傳輸的正文長度是否一致

同時使用setHeader和writeHead

// 返回 content-type = text/plain
const server = http.createServer((req, res) => {
  res.setHeader(&#39;Content-Type&#39;, &#39;text/html&#39;);
  res.setHeader(&#39;X-Foo&#39;, &#39;bar&#39;);
  res.writeHead(200, { &#39;Content-Type&#39;: &#39;text/plain&#39; });
  res.end(&#39;ok&#39;);
});
  • #writeHead

    的優先權比

    setHeader
  • 高,而且writeHead只能呼叫一次,所以在呼叫時,先考慮好哪些頭不常改變後,再呼叫
  • writeHead

  • #如果已經呼叫了
  • setHeader

    設定標頭,那麼他會傳給

    writeHead
  • 合併
  • 如果呼叫了此方法,且還沒呼叫

    response .setHeader()
  • ),則會直接將提供的標頭值寫入網路通道且內部不快取。在標頭上
response.getHeader()

) 不會產生預期的結果。如果需要逐步填入標頭並在未來進行潛在的檢索和修改,則改用 response.setHeader()

######總結###############setHeader 只能一個一個設定標頭,writeHead可以一下設定很多########### #setHeader 可以重複調用,writeHead只能調用一次############同時出現setHeader和writeHead,setHeader會合併到writeHead,並且writeHead優先權高########## ##writeHead 可以設定狀態碼和狀態訊息,setHeader不能設置,只能設定標頭############更多node相關知識,請造訪:###nodejs 教學###! ###

以上是簡單對比Node的setHeader和writeHead,聊差異的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:juejin.cn。如有侵權,請聯絡admin@php.cn刪除