在节点URL请求的查询字符串的开头插入奇怪的值

问题描述 投票:0回答:1

我这里有一个棘手的问题。我创建了一个API,该API将从外部API中获取一些数据。例如:

我在当前的api上具有此端点:

/api/items?q=

在负责此操作的路线上,我有以下代码:

itemsRouter.get("/", async (req, res) => {
  const { q } = req.query;

  try {
    const url = new URL(`externalapiurl?q=​${q}`);

    console.log(url);
    });
  } catch (error) {
    logger.error(error);
  }
});

但是,如果我用console.log检查我的网址,则该网址始终以espaço编码打印,例如:/search?q=%E2%80%8Biphone'

如果我从节点终端上的new URL中检查url对象,则在我的q键上可以看到一些空格:

{ 'q' => '​ iphone' }

URL对象打印如下:

  href:
   'externalapiurl?q=%E2%80%8Bapple%20iphone',
  origin: 'externalapiurl',
  protocol: 'https:',
  username: '',
  password: '',
  host: 'externalapiurl',
  hostname: 'externalapiurl',
  port: '',
  pathname: 'externalapiurl',
  search: '?q=%E2%80%8Bapple%20iphone',
  searchParams: URLSearchParams { 'q' => ' iphone' },
  hash: '' }

因此,请求没有正确提出。我已经尝试过encodeURI和encodeURIComponent,但是问题仍然存在。

PS:此新网址来自const URL = require("url").URL;而且我正在使用node-fetch处理网址调用。

任何帮助将不胜感激!谢谢。

javascript node.js ecmascript-6 node-fetch
1个回答
0
投票

我在控制台中进行了复制/粘贴,这就是我得到的内容:

enter image description here

如您所见,URL中有一个奇怪的特殊角色。它可能在您的文本编辑器中不可见,但会显示在Chrome控制台中。只需尝试删除您的URL字符串,然后再次键入它,我认为它应该可以工作

© www.soinside.com 2019 - 2024. All rights reserved.