【问题标题】:ElasticSearchJS with Electron带有 Electron 的 ElasticSearch JS
【发布时间】:2018-01-23 17:41:38
【问题描述】:

我在一个使用电子的小项目中使用 elasticsearchjs。但不知何故,我遇到了一些奇怪的东西,阻碍了我。

在 Electron 中,我有一个按钮,点击时会触发一个函数:

<button onclick="someFunction()">Click Me</button>

还有以下 Javascript:

import elasticsearch from 'elasticsearch'

function someFunction () {
    console.log('hello world')

    let es = new elasticsearch.Client({
        host: 'http://127.0.0.1:9200',
        log: 'trace'
    })

    es.ping().then(response => {
      console.log(response) // Does not enter, promise is rejected
    })
}

我可以看到hello world 输出,但不知何故,弹性搜索功能不起作用,我收到超时错误...

但是,如果我对函数的调用加倍,并向 elasticsearch API 添加异步调用,它就可以工作,并且我进入了两个 then() 调用:

import elasticsearch from 'elasticsearch'

function someFunction () {
    console.log('hello world')

    let es = new elasticsearch.Client({
        host: 'http://127.0.0.1:9200',
        log: 'trace'
    })

    es.ping().then(response => {
      console.log(response) // promise resolves once the second one is resolved
    })

    setTimeout(() => {
        es.ping().then(response => {
            console.log(response) // resolves
        })
    }, 500)
}

如果我只放setTimeout()函数,它也不起作用,就像我需要调用该函数两次才能让它起作用。

我尝试了一个真正的节点脚本,代码运行良好:

let elasticsearch = require('elasticsearch')

let es = new elasticsearch.Client({
  host: 'http://127.0.0.1:9200',
  log: 'trace'
})

es.ping().then(response => {
  console.log(response) // true
})

Electron 功能可能会导致我的代码无法正常工作,我会错过什么?

感谢大家的热心回复,祝您有美好的一天。

编辑:这是详细的错误和堆栈跟踪:

Uncaught (in promise) StatusCodeError {status: undefined, displayName: "RequestTimeout", message: "Request Timeout after 3000ms", body: false, stack: "Error: Request Timeout after 3000ms
at /home/j…_modules/elasticsearch/src/lib/transport.js:383:7"}body: falsedisplayName: "RequestTimeout"message: "Request Timeout after 3000ms"status: undefinedstack: "Error: Request Timeout after 3000ms
at /home/johndoe/Code/elastic-ui/node_modules/elasticsearch/src/lib/transport.js:354:15
at /home/johndoe/Code/elastic-ui/node_modules/elasticsearch/src/lib/transport.js:383:7"__proto__: ErrorAbstract

【问题讨论】:

  • promise 被拒绝的具体内容是什么?错误信息是什么?堆栈跟踪在哪里?
  • 我用错误消息和堆栈跟踪编辑了我的问题。对于否决这个问题的人,您能否补充一些关于您为什么要这样做的信息?我很乐意编辑我的问题以了解我的错误。
  • 我确实添加了解释。
  • 哦,对不起,我不知道那是你,我希望这个错误对你有帮助

标签: javascript node.js elasticsearch electron elasticsearch.js


【解决方案1】:

我猜测 elasticsearchJS 和 Electron 存在错误,或者您做错了什么。

由于您使用的是 Electron,因此您应该尝试使用该软件包的浏览器版本。

不要使用elasticsearch,而是尝试使用elasticsearch-browser:

yarn add elasticsearch-browser // or npm install elasticsearch-browser

然后替换你的

import elasticsearch from 'elasticsearch'

import elasticsearch from 'elasticsearch-browser'.

此版本的包将生成 XHRHttpRequest,而不是使用 node.js 中的本机 http 模块。然后,您将能够使用 Chrome 网络选项卡更轻松地监控您的请求。

希望对你有帮助

更多信息在这里:https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/browser-builds.html 聊天对话结束 输入消息...

【讨论】:

  • 哇,好用,谢谢!我想确实有问题。但无论如何,这很好用,谢谢!
猜你喜欢
  • 1970-01-01
  • 2017-07-14
  • 2018-05-07
  • 2021-05-09
  • 2017-09-28
  • 1970-01-01
  • 1970-01-01
  • 2022-06-21
  • 2017-02-16
相关资源
最近更新 更多