Node.js 相同的 uri 但不同的参数
Node.js same uri but different parameters
我正在用 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
。
那么,'right' 是哪条路呢?如果是第一个,我该如何设计函数以便它们可以提取正确的值?
尝试使用一种途径,通过尝试将参数解析为数字,您可以检查它是 isbn 还是类型。
如果为 NaN,则类型为 bn
你可以这样做:
// /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);
})
我觉得你尝试的第二种方法应该也可以。
但是,如果你让我这样做。我将创建以下 api:
- /api/books/genre/Adventure
- /api/books/isbn/1231230912
这有助于明确区分 API,并使它们在未来可维护和可读。
为了节省编写 2 个路由处理程序的时间,您可以只编写一个路由处理程序函数并将 genre 或 isbn 作为参数传递。
我正在用 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
。
那么,'right' 是哪条路呢?如果是第一个,我该如何设计函数以便它们可以提取正确的值?
尝试使用一种途径,通过尝试将参数解析为数字,您可以检查它是 isbn 还是类型。
如果为 NaN,则类型为 bn
你可以这样做:
// /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);
})
我觉得你尝试的第二种方法应该也可以。
但是,如果你让我这样做。我将创建以下 api:
- /api/books/genre/Adventure
- /api/books/isbn/1231230912
这有助于明确区分 API,并使它们在未来可维护和可读。
为了节省编写 2 个路由处理程序的时间,您可以只编写一个路由处理程序函数并将 genre 或 isbn 作为参数传递。