首先,我了解可以使用的模块(https://www.npmjs.com/package/elasticsearch),但我正在寻找一种方法来解决这个问题,并使用node.js构建模块。
我正在寻找一种方法,使用http模块在nodejs中执行以下curl请求:
来源:https://www.elastic.co/guide/en/elasticsearch/reference/2.4/search-count.html
curl -XGET 'http://localhost:9200/twitter/tweet/_count' -d '
{
"query" : {
"term" : { "user" : "kimchy" }
}
}'
例如,向请求机构提出请求。
我已尝试过编写帖子数据的手册中所述:https://nodejs.org/api/http.html#http_http_request_options_callback
req.write(parsedData);
答案 0 :(得分:4)
以下是仅使用http
模块向正文发出HTTP GET请求的示例:
var http = require('http');
var options = {
host: 'localhost',
path: '/twitter/tweet/_count',
port: '9200',
method: 'GET',
headers: {'Content-Type': 'application/json'}
};
var callback = function (response) {
var str = '';
response.on('data', function (chunk) {
str += chunk;
});
response.on('end', function () {
console.log(str);
});
};
var data = {a: 1, b: 2, c: [3,3,3]};
var json = JSON.stringify(data);
var req = http.request(options, callback);
req.write(json);
req.end();
要测试它,您可以使用以下命令启动netcat侦听端口9200:
nc -l 9200
运行我的Node示例会发送以下请求:
GET /twitter/tweet/_count HTTP/1.1
Content-type: application/json
Host: localhost:9200
Connection: close
{"a":1,"b":2,"c":[3,3,3]}
如果您不想使用任何npm模块,例如request,那么您需要熟悉内置http
模块的低级API。它有很好的记录:
答案 1 :(得分:1)
我对rsp进行了一些调整,以支持https
import https from 'https';
import http from 'http';
const requestWithBody = (body, options = {}) => {
return new Promise((resolve, reject) => {
const callback = function(response) {
let str = '';
response.on('data', function(chunk) {
str += chunk;
});
response.on('end', function() {
resolve(JSON.parse(str));
});
};
const req = (options.protocol === 'https:' ? https : http).request(options, callback);
req.on('error', (e) => {
reject(e);
});
req.write(body);
req.end();
});
};
// API call in async function
const body = JSON.stringify({
a: 1
});
const result = await requestWithBody(body, options = {
host: 'localhost',
port: '3000',
protocol: 'http:', // or 'https:'
path: '/path',
method: 'GET',
headers: {
'content-type': 'application/json',
'Content-Length': body.length
}
};)