【问题标题】:ExpressJS- display parameter from the urlExpressJS- 显示来自 url 的参数
【发布时间】:2020-04-29 10:06:59
【问题描述】:

我正在使用 API,API 将我重定向到 localhost:3001/home

当它这样做时,它还会发送一个令牌以用于任何 fetch 调用。 然后,网址看起来像:

http://localhost:3001/home#access_token=zTeQkUQkUvTHYqCcmbdWKne04DXaXWur1ZMr0GGZLM_WlVnNBQDS7-sZJZ5tEEkg4Oa2DimoF67jGXJkNzUcw4YIM0WgBVum4yQkUvTHYqCcmbdWKne04DXaXWur1ZMr0GGZLM_WlVnNBQDS7-sZJZ5tEEkg4Oa2DimoF67jGXJkNzUcw4YIM0WgBVum4yOCQWGuqfMfzK60QAHJKDNBZT4-Py6rpbIE&token_type=Bearer&expires_in=3600

我试图显示令牌只是为了检查我是否可以访问它但无济于事。

谁能告诉我哪里出错了?

router.get('/home?:access_token', (req, res) => {
    const token = req.param('access_token');
    res.send(`The token is: ${token}`);
  });

理想情况下,我希望页面显示:

Your token is: zTeQkUQkUvTHYqCcmbdWKne04DXaXWur1ZMr0GGZLM_WlVnNBQDS7-sZJZ5tEEkg4Oa2DimoF67jGXJkNzUcw4YIM0WgBVum4yQkUvTHYqCcmbdWKne04DXaXWur1ZMr0GGZLM_WlVnNBQDS7-sZJZ5tEEkg4Oa2DimoF67jGXJkNzUcw4YIM0WgBVum4yOCQWGuqfMfzK60QAHJKDNBZT4-Py6rpbIE

相反,我得到:

Your token is: e

【问题讨论】:

    标签: javascript express token router


    【解决方案1】:

    您不会在 express 中将路径参数用于查询参数。它们会通过调用 req.query 自动为您检索:

    router.get('/home', (req, res) => {
        const token = req.query.access_token;
        res.send(`The token is: ${token}`);
    });
    

    【讨论】:

    • 如果我这样做,我会得到Your token is: undefined
    • 在您所说的示例 URI 中,您没有将 access_token 作为查询参数传递,而是作为哈希传递。您需要将“/home”之后的“#”符号替换为“?”。这样access_token是一个查询参数,被express自动解析,上面的代码就可以了
    • 是否可以从URL中获取hash值你知道吗?
    • 我不认为它是,不。检查this 线程及其接受的答案,它将解释原因。在您的情况下,您绝对应该使用查询参数(如果在您的控制范围内)
    【解决方案2】:

    应该更正为 req.params 而不是 req.param

      router.get('/home?:access_token', (req, res) => {
        const token = req.params.access_token;
        res.send(`The token is: ${token}`);
      });
    

    P.S:我无法发表评论。试试吧,req.params.access_token

    【讨论】:

    • 对我来说,当我做 req.params() 时,它会抛出一个错误,说 req.params 不是函数
    • 还是e。问题是因为它是/home#access_token 而不是/home?access_token
    【解决方案3】:

    你必须像这样修复:

    router.get('/home', (req, res) => {
        const token = req.param('access_token');
        res.send(`The token is: ${token}`);
      });
    

    您需要添加“?”在你的网址中是这样的:“http://localhost:3001/home?access_token=yourTokenHere

    然后就可以从req.param()中获取token了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-21
      相关资源
      最近更新 更多