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