Node.js与uri相同但参数不同

问题描述 投票:2回答:3

我正在使用Node.js和express进行简单的库API。要获取具有特定类型的ISBN或书籍的特定图书,我有以下功能:

/api/books/isbn

router.get('/:isbn', function (req, res) 
{
  var isbn = req.params.isbn
})

/api/books/query

router.get('/:genre', function (req, res) 
{
  var genre = req.params.isbn
})

首先,这不起作用,因为无论输入是什么,它都只会转到第一个函数。我尝试过的另一件事就是只提供一个提取查询参数的函数:

router.get('/', function (req, res) 
{
  var isbn = req.query.isbn
  var genre = req.query.genre
})

使用这种方法我可以通过像/ api / books这样的调用获得不同的值吗?genre = Adventure或/ api / books?isbn = 1231230912

但我觉得第一种方式更有意义,即/api/books/adventure/api/books/isbn

那么,“正确”的方式是哪种方式?如果它是第一个,我如何设计功能,以便他们可以提取正确的值?

javascript node.js uri
3个回答
2
投票

我认为您尝试的第二种方法也应该没问题。

但是,如果你让我这样做。我将创建以下api:

  1. / API /书籍/音乐风格/冒险
  2. / API /书籍/ ISBN / 1231230912

这有助于在apis之间进行明确区分,并使其在未来可维护和可读。

为了节省编写2个路由处理程序的时间,您只能编写一个路由处理函数,并将类型或isbn作为参数传递。


1
投票

尝试使用一个路由,并尝试将参数解析为一个数字,您可以检查它是isbn还是流派。

如果NaN然后是其他类型的isbn


1
投票

你可以这样做:

// /api/

router.get('/isbn/:isbn', function (req, res) 
{
  var isbn = req.params.isbn
})

// /api/books/query

router.get('/genre/:genre', function (req, res) 
{
  var genre = req.params.genre
})

这将工作,这是最常用的格式。

如果你不想只有一个uri,那么就这样做:

// /api/books/isbn

router.get('/', function (req, res) 
{
    var isbn = req.query.isbn
    var genre = req.query.genre
    if (isbn)
        res.redirect('/isbn/' + isbn);
    else if (genre)
        res.redirect('/genre/' + genre);
})
© www.soinside.com 2019 - 2024. All rights reserved.