DevDevデブ!!

プログラミングのこととか書きます。多分。。。

echoのcontent-type上書きに注意

またgoのechoの話です。

javascirptを実行して欲しかったんや。。。

scriptタグを吐き出すechoのエンドポイントを書いてたんだけど、ブラウザからアクセスしてもjavascriptとして実行されず、プレーンテキストとしてブラウザ上に表示されます。

まあ原因は簡単で、content-typeがtext/plainだったから。

c.String(http.statusOk, script)

ほんじゃあcontent-typeを適切なものに変更しましょうって話になりますね。

なので以下のようにしてみたわけです。

c.Request().Header.Set(echo.HeaderContentType, echo.MIMEApplicationJavaScript)
c.String(http.statusOk, script)

再トライしてもtext/plainのまま(;´Д`)

echoの書き込みメソッドはContent-Typeを上書きする

はい。してました。(普通に考えりゃそりゃそうだって話なんだけど)

func (c *context) String(code int, s string) (err error) {
    return c.Blob(code, MIMETextPlainCharsetUTF8, []byte(s))
}

上記はechoのcontext構造体のStringメソッド

c.Blogの真ん中の引数がContent-Typeなわけです。

JSONメソッドとかHTMLメソッドも中でc.Blobを叩いてて、適切なContent-Typeを設定している。

なので、最初から出力内容に適切なメソッドを使うか、Blobを直接叩いて自分で適切なContent-Typeを指定してあげる必要があると。

今回出力しようとしていたjavascriptはscriptタグを含んだものだったので、HTMLメソッドで出力するとちゃんと動いてくれた。