前提
nuxtを使用してシステムを作っています。
(今回の質問はnuxtとは関係ないと思うのでjavaScriptタグのみ付けております。)
今までPHPでしかシステムを作ったことがなかったので、javaScriptの知識が浅い
実装の質問もなのですが、実装する際の考え方があっているかの確認がしたいため投稿させていただきました。
現在APIが通信エラーになった際のテストをしており、下記のエラーが返ってきました。
通信エラーが発生した際、res.data.statusは返ってこないように実装されています。
発生している問題・エラーメッセージ
YYYY-MM-DD [APP/PROC/WEB/0] ERR ERROR Cannot read property 'status' of undefined
対象のオブジェクトがないからundefinedが出ているのは理解しています。
該当のソースコード
javascript
1 // resはAPIから返ってきたレスポンスとする 2 if (!res || !res.data || !res.data.status ) { 3 context.redirect('/error') 4 }
質問したいこと
- javaScriptではオブジェクトがあるかどうかわからない時(オブジェクトはあるが中身が空も含む)、上記のような判定の仕方は正しいですか?
- obj.hasOwnProperty()などを使うべきなのか?
- エラーがはかれるのは許容すべきなのか?
なぜ疑問に思ったか、質問した経緯、その他
- phpでundefinedが出た時、先輩にはこの手のエラーログが出ないように実装しろと言われていたので、疑問に思いました。jsではこの手のエラーログは出ても仕方ない、許容されている・・・とかあるのでしょうか?
- ネットで一応調べて、上記の実装も正しいように思えましたが、エラーが出てるのが個人的に気持ち悪い&ネットだと探し方が悪かったのか納得があまりできる説明がなかったため、参考になるURLや回答があれば教えてください。よろしくお願いします。
追記
レスポンス書いてましたが勘違いが生じそうなので削除しました。
本当にその行で「Cannot read property 'status' of undefined」が出ているのですか?
はい、出ておりますー。
返り値が記載されていなかったので追記しました。
本来であれば、!res.dataがtrueとなるので、短絡評価で!res.data.statusの評価はなされないはずなのです。何か書かれていない部分に違いがあったりはしないでしょうか?
https://paiza.io/projects/_STyD4CtHuj24-rQhGNaRQ?language=javascript
ご返信ありがとうございます。
すみません、入れ違いでベストアンサー選んでしまったのですが再確認しますmm
確認しました。
ご指摘の通り、別の行でのエラーでした。。
context.redirect('/error')
の後の処理が続いていたようで、
ifの処理の後に、res.data.statusを呼び出している箇所があり、そこでエラーが出てました。大変失礼しました。。。
回答3件
あなたの回答
tips
プレビュー