[英]How to find by ID & IDs in ElasticSearch and ElasticSearch Javascript client
[英]How to use the JavaScript Elasticsearch client errors?
我试图解析来自通过nodeJs Express路由调用的Elasticsearch客户端的错误。 我的情况是我想识别的超时错误。
我或多或少地实现了这样的事情:
var client = new elasticsearch.Client( {
host: process.env.ELASTICSEARCHLOCATION,
requestTimeout:500,
maxRetries:1
});
function returnResponse( response ) {
return function ( resp ) {
//stringExtract
if ( resp.hits && resp.hits.hits ) {
response.status( 200 ).send( resp.hits.hits );
}else{
response.status( 200 ).send( [] );
}
};
}
function handleError( response ) {
return function( err ){
if ( err.statusCode == 404 ) {
response.status( 200 ).send( [] );
} else {
console.error( err.message );
response.status( err.statusCode ).send( err );
}
}
}
router.get( "/test", function ( req, res, next ) {
log.data( "route GET: ", "/wynsureSearch/test" );
log.request( req.url );
client .search( {
index: process.env.ELASTICSEARCHINDEX, //target the wynsure version aka the ES DB index
type: [], //target the wynsure types
body: req.body
}).then( returnResponse( res ), handleError( res ) );
})
没有错误时,一切正常。 但是,当发生超时错误时, handleError()
返回的函数中的断点将向我显示以下内容:
我从elastic.co错误文档中读取到存在标准错误。 如何使功能匹配文档中的错误? 我希望能够匹配例如RequestTimeout或InternalServerError。
在returnResponse和handleError中传递的res
参数是在router.get( "/test", function ( req, res, next ) {
传递的参数router.get( "/test", function ( req, res, next ) {
因此它是undefined
。
来自Elasticsearch的报价
当回调传递给任何API方法时,将使用(错误,响应,状态)进行调用。 如果您更喜欢使用Promise,请不要传递回调,否则将返回Promise。 承诺将通过响应主体来解决,或者因发生的错误而被拒绝(包括针对任何非“存在”方法的300多个响应)。
client .search( {
index: process.env.ELASTICSEARCHINDEX, //target the wynsure version aka the ES DB index
type: [], //target the wynsure types
body: req.body }, function callback(err, response, status){
if (err) {
if(status == 404) res.status(200).send();
else console.error(err.message);
}
else res.status(200).send(response); // res variable is refering to HTTP response whereas response is the result returned from elasticsearch.
});
注意:ElasticSearch中的状态码具有其自身的含义,请不要将其与HTTP状态码混淆。
注意:Javascript支持封闭范围,而不是块范围。
关于未定义的状态代码, ElasticSearch.JS中的状态代码定义似乎存在错误 。
@Spalger提供了有关如何使用JavaScript Elasticsearch客户端错误的解决方案?:
// require the Error class
var EsClientRequestTimeout = require('elasticsearch').errors.RequestTimeout;
// ... somewhere else in your code
client.search(..., function (err) {
if (err instanceof EsClientRequestTimeout) {
console.log('timeout')
} else {
console.log('not a timeout')
}
})
非常感谢@Spalger的帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.