typescript - @types/elasticsearch SearchResponse 类型错误
问题描述
当我使用 @nestjs/elasticsearch 的 ElasticsearchService 时,响应的结果与 @types/elasticsearch 的类型 SearchResponse 不匹配,因为 SearchResponse 是一个对象,但我实际上得到了一个包含 SearchResponse 对象和 Http 状态代码的数组,有人知道如何关闭它?
例子:
[
{
...,
"aggregations": {
"backendVersions": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "1.0.0",
"doc_count": 1
}
]
}
}
},
200
]
解决方案
@nestjs/elasticsearch 的 ElasticsearchService 使用 bindNodeCallback 包装了 es 客户端,文档中对此进行了解释。
所以这:
client.search({
index: 'my-index',
body: { foo: 'bar' }
}, (err, body, statusCode, headers) => {
if (err) console.log(err)
})
将被转换为一个 observable,它将发出一个值,其中包含回调中的 args 减去数组中的 err。
service.search({
index: 'my-index',
body: { foo: 'bar' }
}).subscribe(value => {
console.log(value); // [body, statusCode, headers]
});
您无法关闭此功能,但您可以通过以下方式直接使用 elasticsearch 客户端getClient()
:
const searchResponse = await service.getClient().search({
index: 'my-index',
body: { foo: 'bar' }
});
还要记住,@elastic/elasticsearch [7.x] 中会有重大变化:
client.search({
index: 'my-index',
body: { foo: 'bar' }
}, (err, { body, statusCode, headers, warnings }) => {
if (err) console.log(err)
});
推荐阅读
- java - java - 如何在具有3个表的记录的java中创建数据结构?
- python - 不理解这段代码的真假部分。我在此代码中的输入(所有整数)如何“为真”或“为假”?
- awk - 在新行中打印文件每列之前的第 1 列
- mysql - Laravel 刀片输入隐藏值请求只给出最后一个值,如何在请求中获取 uniqe id?
- c# - 使用 Photon 实时与 .NET 有连接问题
- ios - 如何转换 std::vector
使用 C++ 文件 iOS 项目时到 NSData - javascript - 从脚本中获取真或假(来自 JSON 文件)以显示为复选框
- generics - 具有参数化返回类型的 Kotlin 函数具体化参数
- python - 使用快速选择查找离中位数最近的第 K 个元素
- javascript - 为什么我不能第二次在输入字段中输入文本?