我正在使用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
。
那么,正确的方式是什么呢?办法?如果它是第一个,我如何设计这些功能以便他们能够提取正确的值?
答案 0 :(得分:2)
我认为您尝试的第二种方法也应该没问题。
但是,如果你让我这样做的话。我将在apis下创建:
这有助于明确区分apis并使其在未来可维护和可读。
为了节省编写2个路由处理程序的时间,您只能编写一个路由处理函数,并将类型或isbn作为参数传递。
答案 1 :(得分:1)
尝试使用一条路线,并尝试将参数解析为一个数字,您可以检查它是否为isbn或流派。
如果NaN那么其他类型isbn
答案 2 :(得分: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);
})