[英]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.