ElasticSearch | “data”参数必须是字符串、TypedArray或DataView类型之一

3

我正在学习 ElasticSearch(托管在 AWS 上)。

我正在使用javascript SDK这个连接类

我的代码:

let es = require('elasticsearch');
let client = new es.Client({
  hosts: ['https://search-nboardelastic-xxyy.foo.es.amazonaws.com'],
  connectionClass: require('http-aws-es')
});

function handler() {
  let params = {
    index: 'product',
    q: 'bar'
  };
  client.search(params, (err, data) => {
    if (err) {
      console.log('Error ', err);
    } else {
      console.log('Data ', data);
    }
  })
}

handler();

问题: 当我运行代码时,出现以下错误:

Error: Request error, retrying
  POST https://https://search-nboardelasticxxyy.foo.es.amazonaws.com/product/_search => The "data" argument must be one of type string, TypedArray, or DataView
at checkRespForFailure (/Users/oscarandersen/WebstormProjects/peego/lambda/indexElasticSearch/node_modules/elasticsearch/src/lib/transport.js:266:18)
      at done (/Users/oscarandersen/WebstormProjects/peego/lambda/indexElasticSearch/node_modules/http-aws-es/connector.js:48:7)
      at <anonymous>
      at process._tickCallback (internal/process/next_tick.js:160:7)
      at Function.Module.runMain (module.js:703:11)
      at startup (bootstrap_node.js:193:16)
      at bootstrap_node.js:617:3

我无法弄清楚问题所在,需要帮助。


从错误信息来看,我认为你应该从 hosts 参数中删除 https:// - Pierre-Nicolas Mougel
1个回答

13

我不确定这个答案对你4个月后是否有用,但我遇到了同样的问题,解决方法是设置AWS SDK的区域。有多种方法可以实现这一点,我使用的方法是将aws-sdk引入到我的server.js文件中,并添加 AWS.config.update({ region: "us-west-2" });


谢谢。这在糟糕的错误信息等级中排名相当高。 - dearlbry
1
谢谢Ben,你的回答救了我的一天! - 0bj3ct
Ben,非常感谢你!你真是太棒了! - Sean
Ben..还有一个来自这里的感谢..太棒了..没错..又是一个错误信息的兔子洞。 - Peter Colclough
本...不是所有英雄都会穿披风。 - NicoLA

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接