我想在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)
// ...
})
我希望查询参数是我可以访问的单独地图 有人知道实现此目标的方法吗?
答案 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 “)。