【问题标题】:Express routing giving 404 when receving params接收参数时快速路由给出 404
【发布时间】:2022-01-15 07:10:33
【问题描述】:

我正在使用 Express Router,我正在尝试从 params URL 获取一些信息,但我无法使其正常工作,因为它总是返回 404。

这是我要调用的 URL

http://localhost:8080/api/v1/contr/method?param1=value1&param2=param2

在我的快速路由器中,我有:

this.router.get("/contr/method", JWT.authenticateJWT, ContrController.method.bind(ContrController));

我总是得到

  finalhandler default 404 +2m

如果我发送不带参数的请求,应用会按预期工作:

http://localhost:8080/api/v1/contr/method

【问题讨论】:

  • 我不知道这是否会改变任何东西,但 this.router.get("contr/method", ...) 应该是 this.router.get("/contr/method", ...) 并带有前导 /。另外,请说明路由器本身是如何为/api/v1 注册的。而且,您确定使用不带查询参数的 URL(例如 http://localhost:8080/api/v1/contr/method)可以正常工作吗?而且,您确定您在该路线上使用的中间件没有查看查询参数并跳过它吗?因为,这里缺少太多代码,我们不知道问题出在哪里。
  • 对不起,我添加了缺少的 / (在代码中没问题)。如果我使用输入参数进行调用,则应用程序按预期工作。我有其他路线,一切正常,除了这条带参数的路线。
  • 我发现了问题,我目前正在努力解决它...问题是 param1 是一个 URL,所以这似乎使路由器感到困惑。我正在检查如何发送通过参数的 URL
  • 作为查询参数嵌入在 URL 中的 URL 需要正确编码,以便它们看起来不是路径的一部分。见How to encode URL parameters。您可能希望在 URL 参数本身上使用 encodeURIComponent()

标签: node.js express axios express-router


【解决方案1】:

如果您正在构建一个带有 URL 本身作为参数的 URL,那么您需要在嵌入的 URL 上调用 encodeURIComponent()

let url = "http://localhost:8080/api/v1/contr/method?url=" + encodeURIComponent(otherUrl);

这会以在 URL 解析期间不会与 URL 的路径混淆的方式对参数进行编码。有关更多信息,请参阅 encodeURIComponent() 上的 doc

您需要在任何包含 URL 解析时特殊字符的参数上使用 encodeURIComponent()。然后它们将以十六进制编码,例如%2F,这将导致它们不匹配任何 URL 解析。而且,Express 中的 URL 解析已经自动为您解码。

【讨论】:

    猜你喜欢
    • 2016-04-14
    • 2023-03-17
    • 2016-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    相关资源
    最近更新 更多