送信後にヘッダーを設定することはできません



Cant Set Headers After They Are Sent



今日、Expressフレームワークの美しい静的ルーティングを学習するときに、問題が発生しました。
画像
エラー表示:送信後にヘッダーを設定できません一度送信されたためヘッダーを送信できません
HTTPリクエストを処理する場合、サーバーは最初に応答ヘッダーを出力し、次に本文のコンテンツを出力し、次に応答ヘッダーを1回出力します(例:res.writeHead()またはres.write()またはres.end( ))、res.setHeader()またはres.writeHead()を介して応答ヘッダーを設定しようとすると(res.redirect()などの一部のメソッドはres.writeHead()を呼び出します)エラーを報告します。
res.send()をres.end()に変更すると、コードを正常に実行できます。

res.send()とres.end()の違いは何ですか?

サーバーからクライアントにデータが返されない場合は、res.endを使用できます。
ただし、サーバー側でクライアントに返されるデータがある場合は、res.endではなくres.sendを使用する必要があります(エラーが報告されます)



res.send()の使用方法の抜粋:

res.send([body | status]、[body])

つまり、コンテンツを直接送信することも、最初のパラメータのステータスと2番目のパラメータのコンテンツを送信することもできます。



コンテンツを直接送信した場合、ステータスは自動的に完了します

③送信内容:
例:
res.send(newBuffer( ‘whoop’))
res.send({some: ‘json’})
res.send( ‘some html’)
res.send(404、「申し訳ありませんが、見つかりません!」)
res.send(500、{エラー:「何かが爆発した」})
res.send(200)

[1] 1つ目は、バイナリコンテンツを送信することです。パラメータがBufferの場合、Content-Typeは 'application / octet-stream'に設定されます。これは、そのファイルサフィックス(ファイルタイプ)が次のようになっていることを意味します。一部のタイプでは、次を表示できます。
http://www.w3school.com.cn/media/media_mimeref.asp
そしてこれはウィキが言っていることです
・アプリケーション/オクテットストリーム(任意のバイナリデータ)
つまり、これは任意のバイナリデータです。それをどのように解釈するかは、実際の状況(サフィックス名など)によって異なります。たとえば、それはimgまたはビデオである可能性があります。



[2]文字列が送信されると、htmlファイルとして解釈されます
つまり、Content-Typeはデフォルトで「text / html」に設定されています。
たとえば、投稿を送信してからI res.send( 'aaa')を実行すると、Webページはテキストaaaのみのページにジャンプします。

[3]パラメーターがArray(配列)またはOjbect(オブジェクト)の場合、JSONが返されます