尝试了下,浏览器直接通过js操作elasticsearch。这种方式无需后台服务器了,而且程序业务逻辑都在js里面,代码更新直接替换 原有js和html页面即可,快速便捷,但安全性没有任何保证。
安全方面,前端业务逻辑部分,可以采用压缩加混淆方式;
后端数据请求可以采用nginx进行代理转发,然后使用nginx-lua 编写对应权限判断代码,进行请求权限控制。
<!DOCTYPE html> <html lang="UTF-8"> <head> <meta charset="UTF-8"> <title></title> <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script> <script src="https://cdn.bootcss.com/elasticsearch/14.1.0/elasticsearch.jquery.js"></script> </head> <body> <div id="message"> </div> </body> <script> var client = new $.es.Client({ //连接的服务器 hosts: '192.168.251.7:9200' }); // 获取状态,参数可选,可以只传递一个回调 client.cluster.health(function (err, resp) { if (err) { $("#message").append(err.message + "<br\>"); console.error(err.message); } else { console.dir(resp); $("#message").append("server status: " + resp.status + "<br\>"); } }); var data = { title: 'test!', content: 'It all started when...', date: '2018-03-11' }; // 建立索引, 添加数据 client.index({ index: 'blog', type: 'post', id: 1, body: data }, function (err, resp) { console.dir(resp); console.dir(err); $("#message").append("add data result: " + resp.result + "<br\>"); }); // 搜索文档 client.search({ index: 'blog', size: 50, body: { query: { match: { title : 'test' } } } }).then(function (resp) { console.dir(resp); $("#message").append("search data total num : " + resp.hits.total + "<br\>"); }); </script> </html>