【发布时间】:2019-08-24 01:53:02
【问题描述】:
我有以下路线可用于后端...
admin.js
router.get('/contents', ...); // GET /admin/contents
router.get('/:adminID', ...); // GET /admin/[adminID]
router.put('/:adminID', ...); // PUT /admin/[adminID]
router.get('/', ...); // GET /admin
router.post('/', ...); // POST /admin
.. 但在测试中,如下:
PUT /admin/contents
触发PUT /admin/[adminID] 路由。但“内容”不是 ID。我理解为什么会发生这种情况(即它符合模式),但我不确定最好/常见的解决方案是什么?理想情况下,我希望它能够识别“内容”不是 ID,实际上只是尝试使用不可用的端点。
我可以使用类似...
router.use('/contents', require('./admin-contents'));
但我更愿意将每个顶级端点限制为单个文件,而不是将其分散到这么多文件中。
在最坏的情况下,它将查找 ID 为“contents”的管理员,并返回“找不到管理员”,但我希望它返回 404,因为这不是/admin 的可用端点.
编辑#1
澄清一下,adminID 是字母和数字的混合体,它们都出现在字符串的任何位置。正则表达式不起作用。
另外,/admin/contents 的唯一路径是GET。必须为所有其他方法(PUT、PATCH、DELETE 等)实现空白路由也不理想。
【问题讨论】:
-
A regex will not work。如果 adminId 至少包含一个数字和一个字母,那么正则表达式肯定会起作用。 -
好的,我知道了。是啊,你说得对。如果您想修改下面的答案以进行类似检查(即在已知长度的 ID 字符串中查找任何数字),我会给您金牌
标签: node.js rest api express routes