2017-11-09 13 views
0

':name'パラメータに基づいてデータベースからポイントを返すrouter.get( '/:name'、...)を追加しようとしています。同じルートの複数の.get(...)

ルート/ points.js

import express from 'express' 
import Points from '/path/models/points' 

let router = express.Router() 

router.get('/:session', (req, res) => { 
    Points.query({...}).fetchAll().then(point => { 
     //returns points based on sessionId 
    }) 
}) 

export default router 

私は他人に.get」を追加しようとすると、私は 『セッション』とは異なるパラメータを使用したときに返されるものすべてがオリジナルrouter.getので、定義されていませんが使用され、 'セッション'を探しています。

別のパラメータを取る別の「取得」を追加する方法はありますか?

import express from 'express'; 
import Points from '/path/models/points'; 

let router = express.Router(); 

router.get('/sessions/:session', (req, res) => { 
    Points.query({...}).fetchAll().then(point => { 
    //returns points based on sessionId 
    }); 
}); 

router.get('/names/:name', (req, res) => { 
    .. actual code here .. 
}); 

export default router; 

あなた本当にあなたは、単一のルートを使用することができ、あなたのクエリのための単一とらわれないエントリポイントを持つことを主張し、検索するために、実際のDBクエリを使用している場合:私のコメントにフォローアップ

+0

ルーティングのルートレベルにパラメータを配置するのは悪い考えです。なぜなら、* anything *がそのパラメータに一致するからです。あなたのプロジェクトを通して '/ sessions /:session'のようなものにそのルートを再定義することを検討してください。問題はなくなります。 – Jaxx

答えて

0

あなたの無関係なパラメータとの一致のためにDBのsession_idnameフィールドの両方ような何か:

import express from 'express'; 
import Points from '/path/models/points'; 

let router = express.Router(); 

router.get('/:points', (req, res) => { 
    Points.query({...}).fetchAll().then(point => { 
    //returns points based on sessionId OR name 
    }); 
}); 

export default router; 

は、しかし、私はまだそれがルートレベルでのパラメータのマッチングを持っているひどいアイデアだと信じています。

ルートレベルでパラメータを一致させる2つのルートを同時に持つことは、定義された最初のルートがすべての着信要求を受け取るため不可能ですが、2番目のルートは全く受け付けません。単に:sessionパラメータ:name。ノード/表現するには両方とも同じです。つまり、両方ともと一致しています。がルートスラッシュに続きます。

+0

ありがとうございます。ちょうどこれを試して、それは働いた! – Wilson

+0

@Wilson私はまだ私のオリジナルの解決策が行く方法だとは思うが、それをやり遂げる代わりの方法を追加した。あなたは大歓迎です) – Jaxx

関連する問題