如何在Nock回调中获取查询参数

时间:2019-06-17 17:59:37

标签: node.js nock

我想在nock回复回调中访问查询参数。

公开的请求对象包含将其作为字符串的路径。但是我想以地图的形式访问它们,这样我就不必处理字符串

const scope = nock('http://www.google.com')
  .get('/cat-poems')
  .reply(function(uri, requestBody) {
    console.log('path:', this.req.path)
    console.log('headers:', this.req.headers)
    // ...
  })

我希望查询参数是我可以访问的单独地图 有人知道实现此目标的方法吗?

1 个答案:

答案 0 :(得分:0)

回复函数中this.req的值是经过稍微修改的ClientRequest的实例。

不幸的是,对于您的用例,ClientRequest不能提供一种简单的方法来仅访问查询参数。但是您确实有权访问完整路径,从中可以解析出查询参数。

const nock = require('nock')
const http = require('http')
const url = require('url')

const scope = nock('http://www.google.com')
  .get('/cat-poems')
  .query(true)
  .reply(function(uri, requestBody) {
    const parsed = new url.URL(this.req.path, 'http://example.com')
    console.log('query params:', parsed.searchParams)
    return [200, 'OK']
  })

const req = http.get('http://www.google.com/cat-poems?page=12')

// output >> query params: URLSearchParams { 'page' => '12' }

正在记录的对象是一个URLSearchParams实例。

URL相比,现在首选的方法是使用url.parse构造函数,因此我在示例中使用了它。请记住,URL不会单独解析相对路径,它需要一个原点,但是由于您最终并不关心主机,因此它可以是虚拟值(因此请使用“ example.com “)。