概要
Vue.jsでapi/v1/properties/files/undefined
というエラーがDevツールのコンソールに表示されて、Internal Server Error 500
になってしまいました。本記事ではこのエラーの原因と解決方法を記載します。
エラーの原因
原因は以下の箇所にありました。
:src="url+'api/v1/properties/files/'+property?.image"
property?.image
がundefined
のとき、api/v1/properties/files/undefined
という不正なURLになってしまったのです。
property?.image
は、Vue.jsのセーフナビゲーション演算子(optional chaining operator)を使用していますが、これはproperty
オブジェクトが存在しない場合にプロパティに安全にアクセスするための方法です。
ちなみに、property?.image
という表記は以下のように動作します。
・もしproperty
オブジェクトが存在する場合、そのimage
プロパティの値が返される
・もしproperty
オブジェクトが存在しない場合、undefined
が返される
解決方法
以下のようにすると解決します。
:src="url+'api/v1/properties/files/'+property?.image" v-if="property?.image">
これにより、property
オブジェクトが存在しない場合には<img>
要素(または他の要素)自体がDOMに挿入されないため、不正なURLを回避できます。
このコードでは、プロパティ(property
)オブジェクトのimage
プロパティが存在する場合にのみ、v-if
ディレクティブが評価されます。
v-if
ディレクティブは、Vue.js において特定の条件が真の場合に、要素を描画するかどうかを制御するためのディレクティブ。その条件が真(存在する場合)の場合にのみ、親要素にバインドされた属性が有効になります。
つまり、プロパティオブジェクトにimage
が存在しない場合、この要素はDOMに含まれないことになります。
これによってundefined
のエラーが解決できました。