具有相同路线的多个.get(...)

时间:2017-11-09 18:23:59

标签: reactjs express bookshelf.js

我正在尝试添加router.get('/:name',...),它将根据':name'参数从数据库返回一个点。

路由/ 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'时,我在'session'中使用不同参数时返回的所有内容都是未定义的,因为使用了原始的router.get并且正在寻找'session'。

有没有办法添加另一个带有不同参数的'get'?

1 个答案:

答案 0 :(得分:0)

跟进我的评论:

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;

现在,如果确实坚持为查询提供单个不可知的入口点,则可以使用单个路由,并使用实际的数据库查询来搜索session_id和{数据库中的{1}}字段与您的不可知参数匹配。类似的东西:

name

但是我仍然认为在根级别进行参数匹配是一个糟糕的主意。

至于两个路由同时匹配根级别的参数,这是不可能的,因为定义的第一个路由将接收所有传入的请求,而第二个路由将不接收,只是因为没有办法告诉一个来自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; 参数的:session参数。对于节点/表达,它们都是相同的,即它们都匹配在根正斜杠之后的任何