调整Node请求模块中的querystring/URL

Adjusting the querystring/URL in Node's request module

我正在使用 npm 请求模块在 Express.js 应用程序中向内部 API 发出请求。我将以下选项传递给 request 函数:

requestOptions = {
 url : http://whatever.com/locations/
 method : "GET",
 json : {},
 qs : {
  lng : longitude,
  lat : latitude + '/predictions'
 }

纬度和经度参数会根据用户输入而变化,因此不能硬编码。

我希望向 URL 提出请求的示例是 http://whatever.com/locations/37.891726,-122.277858/predictions

很遗憾,request(requestOptions, callback)的结果是向http://whatever.com/locations/?lng=37.891726&lat=-122.277858%2Fpredictions提出了请求。

我从 documentation 知道我可以将分隔符从 & 调整为 ,,而且 / 我手动附加到 lat 如果我将属性 qsStringifyOptions : {encode: false} 添加到 requestOptions,则可以正确发送。但是按照我的方式手动添加 /predictions 一开始感觉不对,我仍然遇到剩余格式的困难——即删除 lat=/lng=,初始 ?来自查询字符串。

是否可以以某种方式更改查询字符串选项以满足我的需要,或者请求包是否可能不是我想要的?

如果 http://whatever.com/locations/[lng],[lat]/predictions 是您想要的,那么 lng 和 lat 不是查询字符串参数,而是 URI 路径的一部分。您可以完全跳过查询字符串并将您的 requestOptions 更改为:

requestOptions = {
    url: 'http://whatever.com/locations/' + lng + ',' + lat + '/predictions',
    method: 'GET',
    json: {}
};