
[code]

    app.use('/users',users);
    router.get('/:user', function(req, res, next) {
    
[/code]

を使ってルーティングするのはできるんですが、`/users/:user/`以下が増えた時のためにファイルを分けておきたいのですが

[code]

    app.use('/users/:user',users);
    router.get('/', function(req, res, next) {
    
[/code]

だと`req.params.user`でパラメーターが取得できなくて困ってます  
どう解決すればいいのでしょうか


CC BY-SA 3.0
2017-04-24T14:57:58.317
34246
2018-09-19T07:00:32.433
2017-04-24T16:00:42.350
3068
20047
question
node.js
expressのルーティングでurlに変数を入れた時のファイルの分け方


私はこのようにしています。

メインのファイル app.js には以下のように定義し、

[code]

    const app = require("express")()
    app.use("/users", require("./routes/users"))
    
[/code]

/users 以下を扱う users.js ファイルを作ります。users.js では次のように router を定義します

[code]

    const express = require("express")
    const router = express.Router()
    
    router.get('/:user', function(req, res, next) {
        ...
    }
    
    module.exports = router
    
[/code]

こうしておくと `/users/12345` にアクセスすると req.params.user で `12345` が取得できます。

router が増えても以下のように分かりやすい構造になります。

[code]

    app.use("/", require("./routes/index"))
    app.use("/users", require("./routes/users"))
    app.use("/ranking", require("./routes/ranking"))
    app.use("/bookmarks", require("./routes/bookmarks"))
    
[/code]


CC BY-SA 3.0
2017-04-26T08:43:51.647
34289
2017-04-26T08:43:51.647
8771
34246
answer


`:id`などの位置で`Router`を分けたとき、子供`Router`のファイル側で`req.params.id`などとして受け取るということですね。

[Express
4.xのドキュメント](http://expressjs.com/ja/api.html#express.router)によると`Router`生成時に`express.Router({
mergeParams: true })`とすると親のRouterの変数を引き継げるようです。

ですのでclenousさんの例ですと  
`router.get('/', function(req, res, next) {`  
がかいてある側のファイルの`router`を`express.Router({ mergeParams: true })`で生成する必要があります。


CC BY-SA 3.0
2018-03-27T18:00:46.767
42679
2018-03-27T18:00:46.767
14222
34246
answer