2016-12-17 6 views
0

質問が間違っている可能性があります...間違ったエクスプレスルートがトリガーされましたか?

私は、エクスプレス、Node.js、MongoDB(mongoose)を使用してURL短縮ツールを作ろうとしています。

ユーザーがホームページを読み込むと、ホームページにリダイレクトされるように設定しました。

// horribly designed home page 
app.get('/', function(req, res){ 
    res.render('index'); 
    res.end(); 
}); 

この部分は動作します。ユーザーはホームページを正常に表示します。

// redirects to corresponding url 
app.get('/:digits', function(req, res){ 
    console.log('getting full url from database'); 
} 

ユーザーがホームページ(/)に移動するたびに、このパスもトリガされ、I「はデータベースから完全なURLを取得」を参照:

しかし、その後は、私はまた、次のコードを持っていますコンソールで

これはなぜですか?

Full code is here

+0

ブラウザは '/ favicon.ico'のリクエストを送信しているので、' /:digits'パスもトリガされます。 あなたのホームページに 'curl http:// localhost:3000 /'のようなcurlリクエストを送ると、 '/:digits'ルートがトリガされないことがわかります。 – dikesh

答えて

0

ルートに、このセクションをご覧くださいパラメータ:公式ドキュメントから

http://expressjs.com/en/guide/routing.html

このリクエストURL:

http://localhost:3000/users/34/books/8989 

はこれにルーティングされますパス:

/users/:userId/books/:bookId 

とreq.paramsオブジェクトは、あなたの場合は

{ "userId": "34", "bookId": "8989" } 

次のようになります。私はクロームでそれをしようとしたとき、私は 'favicon.icoを' とreq.params.digitsを得ました。ルートがトリガされた理由を

  • '/favicon.ico' への2番目の要求がある '/' のパスに

    1. :ブラウザが2つの要求をしている意味

      あなたは、あなたのブラウザはあなたがまた確認するために、「開発者向けオプション」(クローム)、放火犯(Firefoxの)を使用することができます

      app.get('/:digits', function(req, res){ 
          console.log('getting full url from database'); 
          console.log(req.params.digits); 
      }); 
      

      を送信しているかを確認するにはconsole.logコードを追加してみてくださいすることができます。

    +0

    うーん、これは変です。なぜreq.params.digitsが 'favicon.ico'になるのかわかりません –

    +0

    ブラウザがホームページをリクエストするたびにapp.get(/:digits)がトリガーされる理由はまだ分かりません –

    +0

    要求はwebisteアイコンである/favicon.icoに対するものです。それは私の説明に基づいて引き起こされます。 – RLaaa

    0

    私はあなたのコードを見ていますが、あなたはいくつかのものを見逃している可能性があります。

    「ビュー」フォルダの設定はありますか? res.renderを使うことで、expressは 'views'フォルダから 'view'を 'ejs'ビューエンジンでレンダリングすることを期待しています。

    私は、そのフォルダが明示的に自分の構造内で定義されていなければ、ルーティングに問題があることを発見しました。

    +0

    はい、index.ejsを含むviewsフォルダがあります。申し訳ありませんが、元の投稿でそれを言及している必要があります –

    +0

    これは役立つかどうかわかりません... res.render()文の後にres.end()をコメントアウトしてみましたか? –

    +0

    これが役立つかどうかわかりませんが、res.render()ステートメントの後にres.end()をコメントアウトしてみましたか?それが助けになるかどうかは分かりませんが、静的なファイルをどのようにレンダリングしているかを確認します。 つまり、app.use( '/ static'、express.static(path.join(__ dirname、 'public'))) https://expressjs.com/en/starter/static-files.html –

    関連する問題