質問: function(req,res){ res.render('posts/show',{post:posts[req.params.id]}); }; //※省略 ``` ``` //index.ejs //※省略 Posts <% for (var i=0; i <%= posts[i].title %> <% } %> //※省略 ``` ``` //show.ejs //※省略 <%= post.title %> <%= post.body %> //※省略 ``` 無知のため、間違いなどあると思いますが、今私が理解できている処理の流れを書かせていただきます。 まず、urlがindexの際はapp.jsのapp.get('/', post.index);でpost.jsファイルのindexメソッドが呼ばれ index.ejsファイルを読み込み?、第二引数にはindex.ejsにpostsの配列を渡す。 そしてforでループし、順番に配列の中身を取り出していく。 生成されたリンクをクリックすると、urlが/posts/<%= i(整数) %>にアクセスし、 app.jsの、app.get('/posts/:id([0-9]+)', post.show);でpost.jsファイルのshowメソッドが呼ばれる。 ここからが理解できていません。 この時に渡すデータとしてpost:posts[req.params.id]とありますが、 postsの配列にidというキーはなく、またshow.ejsではtitleやbodyも呼び出しています。 渡したのはidとあるのでpost:整数ではないのかと思うのですが、この post:posts[req.params.id]は何をどのようにしてshow.ejsへ渡しているのでしょうか?
回答: index.ejsにPostsとありますが、 `">`のidをPostメソッド(?)で渡したいのかな?? 見たところapp.getなのでGetメソッドになるのですが、 何か渡したいときはURLに値を含める必要があります。 showにidを渡したいならば`'/posts/:id([0-9]+)`とある通り、 posts/123という風にアクセスするとreq.param.idに123が渡されると思います。