在express中,我有一条路线不需要';我不匹配,我想知道为什么?

在express中,我有一条路线不需要';我不匹配,我想知道为什么?,express,routes,Express,Routes,当我发送: PATCH /55148df6935c4bac084b30b2/token/eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJfaWQiOiI1NTE0OGRmNjkzNWM0YmFjMDg0YjMwYjIiLCJpYXQiOjE0MzAyNTE2OTg5NDIsImV4cCI6MTQzMDI1MTkzODk0Mn0.n8Itqpaf7hjyq23ke977S0oamqXSwEF9iFR62Mlo9Sw 我总是回来404?为什么?我错过了什么 路线是

当我发送:

PATCH /55148df6935c4bac084b30b2/token/eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJfaWQiOiI1NTE0OGRmNjkzNWM0YmFjMDg0YjMwYjIiLCJpYXQiOjE0MzAyNTE2OTg5NDIsImV4cCI6MTQzMDI1MTkzODk0Mn0.n8Itqpaf7hjyq23ke977S0oamqXSwEF9iFR62Mlo9Sw
我总是回来404?为什么?我错过了什么

路线是

router.patch('/:id/token/(.+)/', ...)

很明显,我忽略了一些假设。绳子太长了吗?字符串中的“.”是否导致问题?您能帮忙吗?

Express不接受这样的路径中的原始正则表达式模式。您需要将它们附加到命名管线参数。您可以这样指定正则表达式:
:token([\\w\.]+)
,但是默认的
:token
应该已经与您的测试字符串匹配。例如,这可能就是您正在寻找的:

router.patch('/:id/token/:token', function(req, res) {
    console.log('My ID:', req.params.id);
    console.log('My token:', req.params.token);
})

但我也建议在请求主体中而不是在请求路径中发送
补丁
数据。您可以将它们作为url编码的表单参数(例如
token=1234abcd
)或JSON发送。这更“规范”,另一个优点是,您没有潜在的敏感信息保存在浏览器历史记录和HTTP日志中。

在发布此问题之前,我尝试的第一件事是尝试您的建议“/:id/token/:token”,因为这是一件容易的事情。但404失败了——但为什么是谜题呢。但我同意,更好、更规范的做法是将token作为参数发送。我会这样做,然后再报告。谢谢你的建议!令人惊讶地切换到“/:id”并发送:PATCH…TgsImV4cCI6MTQzNTUwMzQzMTc1OH0.NuRrUBR-hQBlT7sXz36Y_oHAKipDOHupEt2zneKUN-o像以前一样为s提供404(未找到)。。。。接下来我将尝试发送json并隐藏这个奇怪的令牌结构。。。i、 e.正确的路径是“/api/users/:id”,我有“/api/user/:id”,因此是404。所以现在一切如预期。谢谢你的洞察力我最喜欢的一句格言是:“哑巴真的很强大。”:-)“所以,孤星,现在你看到了邪恶永远会胜利,因为善是哑巴。”