Nori777
@Nori777 (Nori)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

LINE Bot制作中キーワード検索が該当なしの場合のシステムエラーを止めたい

解決したいこと

初歩的な質問で恐縮です。
キーワード検索した飲食店のURLを受信するLINE Botの制作を行っていますが、検索結果が存在しない場合、システムが止まってしまいます(=「ポートXXXX番でExpressサーバーを実行中です…、」が止まってしまいます)。正しく店名やキーワードを入れた時は正常に動作し、URL情報を取得できます。ホットペッパーAPIを使用しています。

検索結果が存在しない場合は、
VS Code内にJavaScriptファイル(jsファイル)を作成し、Node.jsで実行しても上記エラーが出てしまいます。 //try{ } catch (error)の正しい使い方、もしくは別の解決方法をご指摘いただければ大変有難いです。よろしくお願いいたします。

現行のコード

const sampleFunction = async (event) => {
    // ホットペッパーAPIのURLとAPIキーを入れる。Event.message.textでメッセージ内容を拾いEncodeURIで日本語変換されたキーワードを返す。キーワード情報からホットペッパーのURLを表示。
  
    const res = await axios.get('http://webservice.recruit.co.jp/hotpepper/shop/v1/?key=ここにAPIキーを入れる&format=json&keyword='+encodeURI(event.message.text));
          console.log(res.data.results.shop[0].urls.pc);
    
      return client.replyMessage(event.replyToken, {
        type: 'text',
        text: res.data.results.shop[0].urls.pc
      });
    }

自分で試したこと

下の変更後のコードの通り、//try{ } catch (error)を現行のコードに追加しました。
(それ以外の変更はありません)

しかし、今度は検索結果がヒットしない場合は元より、本来検索結果が存在する場合も、システムが止まってしまいます(=「ポートXXXX番でExpressサーバーを実行中です…、」が止まってしまいます)。

変更後のコード( //try{ } catch (error)追加後のコード)

const sampleFunction = async (event) => {
    // ホットペッパーAPIのURLとAPIキーを入れる。Event.message.textでメッセージ内容を拾いEncodeURIで日本語変換されたキーワードを返す。キーワード情報からホットペッパーのURLを表示。
  try {
    const res = await axios.get('http://webservice.recruit.co.jp/hotpepper/shop/v1/?key=ここにAPIキーをコピペ&format=json&keyword='+encodeURI(event.message.text));
          console.log(res.data.results.shop[0].urls.pc);
    //try{ } catch (error)で検索にかからない時に、エラー情報を取得してシステムが止まらないようにする
  }catch (error) {
            console.error(error)};
      return client.replyMessage(event.replyToken, {
        type: 'text',
        text: res.data.results.shop[0].urls.pc
      });
    }
0

1Answer

まずはエラーメッセージを確認してください。それを見ないでデバッグは出来ません。

ここからは推測ですが、結果が見つからない場合、res.data.results.shop[0]のどこかがundefinedになるように思います。client.replyMessageの中のtextは文字列でないとエラーになるような気がします。

try catchについては、const restryブロックで定義してるのでそのブロックの外では見えません。

1Like

Comments

  1. @Nori777

    Questioner

    ご返信どうもありがとうございます!情報が不十分で申し訳ございません。ご丁寧なご説明に大変感謝いたします。以下のQitaの記事に今回のコード全文を掲載させていただきました。

    https://qiita.com/Nori777/items/4c3193e138c2baba66ce

Your answer might help someone💌