簡體   English   中英

帶有Electron的ElasticSearchJS

[英]ElasticSearchJS with Electron

我在一個使用電子的小項目中使用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
})

我可能會錯過哪些電子功能來阻止我的代碼正常工作?

謝謝大家的友好回復,並祝您愉快。

編輯:這是詳細的錯誤和堆棧跟蹤:

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

我猜是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的本地http模塊。 然后,您可以使用Chrome網絡標簽更輕松地監控您的請求。

我希望這有幫助

此處的更多信息: https : //www.elastic.co/guide/zh-CN/elasticsearch/client/javascript-api/current/browser-builds.html聊天會話結束鍵入消息...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM