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

Multiple .get(...) with same route

我正在尝试添加 router.get('/:name', ...),这将 return 基于 ':name' 参数从数据库中获取一个点。

routes/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' 的不同参数时,所有 returned 都是未定义的,因为使用了原始 router.get正在寻找 'session'.

有没有办法添加另一个采用不同参数的 '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;

现在,如果您真的坚持为您的查询设置一个不可知的入口点,您可以使用一个路由,并使用实际的数据库查询来搜索两个 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;

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

至于有两个路由在根级别同时匹配参数,那是不可能的,因为定义的第一个路由将接收所有传入请求,而第二个将接收 none,只是因为没有办法从 :name 参数中分辨出 :session 参数。对于 node/express,它们都是相同的,即它们都匹配 根正斜杠后的任何内容