javascript - 如何格式化带有多个问号的url并确保使用最后一个查询字符串

标签 javascript node.js url query-string

在我的 node.js 应用程序中,我正在使用一个接受调用的 API,如下所示

http://myapi.com/action?url= https://www.test.com/play?action=jump

然后根据传递到 URL 参数的参数(例如 – ‘action=jump’),API 返回一个特定的响应。

我遇到的问题是,在某些情况下,发送到 API 的 URL 可能已经带有带有查询字符串的问号(?song=portrait)

http://myapi.com/action?url= https://www.test.com/play?song=portrait?action=jump

在这种情况下,API 发回了错误的响应,因为它使用了查询字符串中的第一个问号参数。示例 ?song=portrait

在不修改 API 的情况下,如何确保 API 读取最后的参数 - 示例 – action=jump

有没有办法在保留有效 URL 的情况下转义第一个问号,或者如何使用 url.format()url.parse() 来解决这个问题

我忘了补充一点,我已经对传递到 URL 参数的 URL 进行了编码。

最佳答案

考虑使用 url.parse()/url.format()在 node.js 中正确处理 url。

你可以试试:

var url = require('url');
  , apiurl = 'http://myapi.com/action';
  , urlObject = url.parse(apiurl);

// Add query string parameters
urlObject.query = {
  action: 'jump', 
  url: 'https://www.test.com/play?song=portrait'
};

// Generate valid url
var urlString = url.format(urlObject);
console.log(urlString); 

它会构建一个正确的 url:http://myapi.com/action?action=jump&url=https%3A%2F%2Fwww.test.com%2Fplay%3Fsong%3Dportrait

此外,请记住第一个问号 are treated as literal 之后的任何其他问号.

关于javascript - 如何格式化带有多个问号的url并确保使用最后一个查询字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38234051/

相关文章:

Angular 路由器 : ignore slashes in path parameters

url - 如何为不区分大小写的 URL 配置 Tomcat?

javascript - 文件上传在 Safari 和 Chrome iOS8.1.2 上显示带有空字符串的数据

javascript - 当两个输入框中任意一个有输入时,如何自动将输入框的值设置为相反的数字?

node.js - 未捕获( promise ): Error: No provider for GooglePlus

javascript - Node-mysql pool.query 在 10 分钟查询后断开连接

node.js - custom_element_apigen:导入纸张数据表到Dart时出错

php - 如何在 URL 中传递值内的 '&' 符号?

javascript - 如何通过 anchor 模式打开数据 url?

javascript - 未捕获的 DOMException : Failed to execute 'pushState' on 'History' :