ERROR [ errno HttpSum HeadersSense ]送信した後にヘッダを設定できません
4768 ワード
問題点:
私はノードに非常に新しいです.JSと私はほとんど問題がありません.私はノードを使用しています.JS 4.10エクスプレス2.4.3 .私のコードを実行しようとしているとき、私は以下のエラーを受け取っています:エラー:クライアントに送られた後にヘッダーをレンダリングできません.
を返します.( http . js : 580 : 12 )
である.RenderHeaders (/home/eugene/public - serial html/ALLUNDES THINES NORMAT/project/fb 2/nodeound module/connect/lib/patch . js : 70 : 30 )
を返します.writehead ( HTTP . js : 830 : 30 )
AT/HOME/EUGENT/PublenCount HTML/ALLRIGHT THIGSSEND NOTES/project/fb 2/nodeound module/connect th th/lib/auth戦略/Facebook.JS : 30 : 20
AT/HOME/EUGENT/PublenCount HTML/ALLRIGHT THIGSSEND NOTES/project/fb 2/nodeound module/connect auth/lib/indexJS : 120 : 20
次の(/home/eugene/public - html/allRange - thingsound node/project/fb 2/nodeound module/connect auth/lib/StrategExecutor . js : 50 : 40 )
オブジェクトオブジェクトで.<高橋潤子>
オブジェクトオブジェクトで.<高橋潤子>
オブジェクトオブジェクトで.リダイレクト(/home/eugene/publiccache html/allounds - thingsnode/project/fb 2/nodeound module/connect auth/lib/authexecutionscope . js : 20 : 10 )
オブジェクトオブジェクトで.<高橋潤子>
ERROR :送信後にヘッダを設定できません.
を返します.( http . js : 540 : 22 )
を返します.SetHeader (/home/eugene/publicount html/allrelth thingsounds node/project/fb 2/nodeound module/connect/lib/patch . js : 60 : 30 )
次の(/home/eugene/publicdent html/allrelthingssevernode/project/fb 2/nodeound module/connect/lib/http . js : 170 : 23 )
次の(/home/eugene/publiccache html/allrelthingssevernode/project/fb 2/nodeound module/connect/lib/http . js : 201 : 15 )
次の(/home/eugene/publicdent html/alldelay thingsound node/project/fb 2/nodeound module/connect/lib/http . js : 170 : 30 )
Param (/home/eugene/public - html/allrelth thingsound node/project/fb 2/nodeound module/connect/lib/middleware/router . js : 195 : 17 )
at ( AT/HOME/EUGENT/public - html/AllRange ThingsSIGN node/project/fb 2/nodeound module/connect/lib/middleware/router . js : 202 : 16 )
オブジェクトで.ルータas handle
次の(/home/eugene/publiccache html/allrelthingssevernode/project/fb 2/nodeound module/connect/lib/http . js : 204 : 20 )
オブジェクトで.Auth as handle
ERROR :送信後にヘッダを設定できません.
.
.
.
下記のコード
var realfbid = "xxx ";
var realfbsecret = "xxxxxx "
var realfbCallbackAddress= "http://127.0.0.1:8888/auth/facebook_callback "
var realcookiesecret = "node ";///セキュリティのためにランダムハッシュを入力してください
var realexpress = require (' realexpress ');
var realauth = require (' connect - auth ')
var realapp = realexpress.createserver ();
RealAppconfigure ()関数
RealAppを使用します.
RealAppを使用します.
RealAppを使用します.
RealAppを使用します.
RealApp使用する
Realauthフェイスブック
AppID : RealfBid ,
AppSecret : RealfbSecret ,
コールバック: realfbcallbackaddress
スコープ:「オフラインアクセス、メール、ユーザ名、ユーザー、アクティビティ、管理ページ、Publishstra Stream」
失敗しました
))>
));
RealAppを使用します.
));
.
.
.
解決方法
コールバック関数を使用している場合は、ERRブロック後のリターンを使用します.これはこのエラーが起こる最も頻繁なシナリオの一つです.
realusermodel.CreateUser ( data , function ( realerr , realdata ){ }
私はノードV 10でテストしました.16.0および急行4.16.4
もう一つの解決策
ExpressのRESTオブジェクトはノードのサブクラスです.JSのHTTP.ServerResponse ( http . jsのソースを読んでください).RES . Writehead(statuscode)を呼び出すまで、ressReader(名前、値)を頻繁に呼び出すことができます.writeheadの後、ヘッダは焼かれます、そして、あなたはRES . Writeだけを送ることができます.
エラー“エラー:送信後にヘッダーを設定できません.”は既に本体や終了した状態になっていることを意味しますが、いくつかの関数はヘッダーやステータスコードを設定しようとしました.このエラーを見ると、既にいくつかのボディが書き込まれた後にヘッダーを送信しようとする何かを探してみてください.たとえば、誤って2回呼び出されるコールバック、またはbodyが送信された後に発生するエラーを探します.
あなたの場合、ResponreDirect ()と呼ばれ、応答が終了しました.それから、あなたのコードはエラーを引き起こしました.そして、あなたの実際の関数(REQ、RES、NEXT)の中でエラーが発生したので、接続はそれを捕えて、それから500の誤りページを送らせようとしました.しかし、ヘッダーが既に送られたので、ノード.JSのsetheaderは、あなたが見たエラーを投げました.
良いミドルウェア
コード
//レスポンス本文を変更しないミドルウェア
varは関数を返します.
リクエスト.パラメータ
A :"B "
//
//ヘッダを変更していないため、次を呼び出します
next ()
//
//レスポンス本文を変更するミドルウェア
var = modimodiybody = function ( request , response , next ){ { } { { } { { } { } {\f 3 } {\f 3\fP\fP\fP\fP\
レスポンス.SetHeader ("content type ", "text/html ");
レスポンス.write ()
ハロー・ワールド
レスポンス.end ()関数
//next ()をコールしません
//
アプリ.を使用します.
アプリ.を使用します.
問題のミドルウェア
VARの問題を解決する
レスポンス.SetHeader ("content type ", "text/html ");
レスポンス.write ()
ハロー・ワールド
next ()
//
問題のミドルウェアは応答を呼ぶことなく応答ヘッダーを設定します.end ()とNext ()を呼び出します.
私はノードに非常に新しいです.JSと私はほとんど問題がありません.私はノードを使用しています.JS 4.10エクスプレス2.4.3 .私のコードを実行しようとしているとき、私は以下のエラーを受け取っています:エラー:クライアントに送られた後にヘッダーをレンダリングできません.
を返します.( http . js : 580 : 12 )
である.RenderHeaders (/home/eugene/public - serial html/ALLUNDES THINES NORMAT/project/fb 2/nodeound module/connect/lib/patch . js : 70 : 30 )
を返します.writehead ( HTTP . js : 830 : 30 )
AT/HOME/EUGENT/PublenCount HTML/ALLRIGHT THIGSSEND NOTES/project/fb 2/nodeound module/connect th th/lib/auth戦略/Facebook.JS : 30 : 20
AT/HOME/EUGENT/PublenCount HTML/ALLRIGHT THIGSSEND NOTES/project/fb 2/nodeound module/connect auth/lib/indexJS : 120 : 20
次の(/home/eugene/public - html/allRange - thingsound node/project/fb 2/nodeound module/connect auth/lib/StrategExecutor . js : 50 : 40 )
オブジェクトオブジェクトで.<高橋潤子>
オブジェクトオブジェクトで.<高橋潤子>
オブジェクトオブジェクトで.リダイレクト(/home/eugene/publiccache html/allounds - thingsnode/project/fb 2/nodeound module/connect auth/lib/authexecutionscope . js : 20 : 10 )
オブジェクトオブジェクトで.<高橋潤子>
ERROR :送信後にヘッダを設定できません.
を返します.( http . js : 540 : 22 )
を返します.SetHeader (/home/eugene/publicount html/allrelth thingsounds node/project/fb 2/nodeound module/connect/lib/patch . js : 60 : 30 )
次の(/home/eugene/publicdent html/allrelthingssevernode/project/fb 2/nodeound module/connect/lib/http . js : 170 : 23 )
次の(/home/eugene/publiccache html/allrelthingssevernode/project/fb 2/nodeound module/connect/lib/http . js : 201 : 15 )
次の(/home/eugene/publicdent html/alldelay thingsound node/project/fb 2/nodeound module/connect/lib/http . js : 170 : 30 )
Param (/home/eugene/public - html/allrelth thingsound node/project/fb 2/nodeound module/connect/lib/middleware/router . js : 195 : 17 )
at ( AT/HOME/EUGENT/public - html/AllRange ThingsSIGN node/project/fb 2/nodeound module/connect/lib/middleware/router . js : 202 : 16 )
オブジェクトで.ルータas handle
次の(/home/eugene/publiccache html/allrelthingssevernode/project/fb 2/nodeound module/connect/lib/http . js : 204 : 20 )
オブジェクトで.Auth as handle
ERROR :送信後にヘッダを設定できません.
.
.
.
下記のコード
var realfbid = "xxx ";
var realfbsecret = "xxxxxx "
var realfbCallbackAddress= "http://127.0.0.1:8888/auth/facebook_callback "
var realcookiesecret = "node ";///セキュリティのためにランダムハッシュを入力してください
var realexpress = require (' realexpress ');
var realauth = require (' connect - auth ')
var realapp = realexpress.createserver ();
RealAppconfigure ()関数
RealAppを使用します.
RealAppを使用します.
RealAppを使用します.
RealAppを使用します.
RealApp使用する
Realauthフェイスブック
AppID : RealfBid ,
AppSecret : RealfbSecret ,
コールバック: realfbcallbackaddress
スコープ:「オフラインアクセス、メール、ユーザ名、ユーザー、アクティビティ、管理ページ、Publishstra Stream」
失敗しました
))>
));
RealAppを使用します.
));
.
.
.
解決方法
コールバック関数を使用している場合は、ERRブロック後のリターンを使用します.これはこのエラーが起こる最も頻繁なシナリオの一つです.
realusermodel.CreateUser ( data , function ( realerr , realdata ){ }
if(realerr) {
res.status = 422
res.json(realerr)
return // without this return the error can happen.
}
return res.json(realdata)
))>私はノードV 10でテストしました.16.0および急行4.16.4
もう一つの解決策
ExpressのRESTオブジェクトはノードのサブクラスです.JSのHTTP.ServerResponse ( http . jsのソースを読んでください).RES . Writehead(statuscode)を呼び出すまで、ressReader(名前、値)を頻繁に呼び出すことができます.writeheadの後、ヘッダは焼かれます、そして、あなたはRES . Writeだけを送ることができます.
エラー“エラー:送信後にヘッダーを設定できません.”は既に本体や終了した状態になっていることを意味しますが、いくつかの関数はヘッダーやステータスコードを設定しようとしました.このエラーを見ると、既にいくつかのボディが書き込まれた後にヘッダーを送信しようとする何かを探してみてください.たとえば、誤って2回呼び出されるコールバック、またはbodyが送信された後に発生するエラーを探します.
あなたの場合、ResponreDirect ()と呼ばれ、応答が終了しました.それから、あなたのコードはエラーを引き起こしました.そして、あなたの実際の関数(REQ、RES、NEXT)の中でエラーが発生したので、接続はそれを捕えて、それから500の誤りページを送らせようとしました.しかし、ヘッダーが既に送られたので、ノード.JSのsetheaderは、あなたが見たエラーを投げました.
良いミドルウェア
コード
//レスポンス本文を変更しないミドルウェア
varは関数を返します.
リクエスト.パラメータ
A :"B "
//
//ヘッダを変更していないため、次を呼び出します
next ()
//
//レスポンス本文を変更するミドルウェア
var = modimodiybody = function ( request , response , next ){ { } { { } { { } { } {\f 3 } {\f 3\fP\fP\fP\fP\
レスポンス.SetHeader ("content type ", "text/html ");
レスポンス.write ()
ハロー・ワールド
レスポンス.end ()関数
//next ()をコールしません
//
アプリ.を使用します.
アプリ.を使用します.
問題のミドルウェア
VARの問題を解決する
レスポンス.SetHeader ("content type ", "text/html ");
レスポンス.write ()
ハロー・ワールド
next ()
//
問題のミドルウェアは応答を呼ぶことなく応答ヘッダーを設定します.end ()とNext ()を呼び出します.
Reference
この問題について(ERROR [ errno HttpSum HeadersSense ]送信した後にヘッダを設定できません), 我々は、より多くの情報をここで見つけました https://dev.to/kodlogs/error-errhttpheaderssent-cannot-set-headers-after-they-are-sent-to-the-client-4andテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol