Вызов API-интерфейса POST-интерфейса JS
Я новичок с nodeJS.
Что я пытаюсь сделать:
У меня есть POST API, и когда я вызываю его с помощью почтальона, он дает мне правильный ответ, как показано на рисунке ниже:
Но когда я пытаюсь поразить его, используя NodeJS node-rest-client ( https://www.npmjs.com/package/node-rest-client), он дает мне неуместный большой объект, как показано ниже:
IncomingMessage {
_readableState:
ReadableState {
objectMode: false,
highWaterMark: 16384,
buffer: BufferList { head: null, tail: null, length: 0 },
length: 0,
pipes: null,
pipesCount: 0,
flowing: true,
ended: true,
endEmitted: true,
reading: false,
sync: true,
needReadable: false,
emittedReadable: false,
readableListening: false,
resumeScheduled: false,
defaultEncoding: 'utf8',
ranOut: false,
awaitDrain: 0,
readingMore: false,
decoder: null,
encoding: null },
readable: false,
domain: null,
_events:
{ end: [ [Function: responseOnEnd], [Function] ],
data: [Function],
error: [Function] },
_eventsCount: 3,
_maxListeners: undefined,
socket:
Socket {
connecting: false,
_hadError: false,
_handle: null,
_parent: null,
_host: null,
_readableState:
ReadableState {
objectMode: false,
highWaterMark: 16384,
buffer: [Object],
length: 0,
pipes: null,
pipesCount: 0,
flowing: true,
ended: false,
endEmitted: false,
reading: true,
sync: false,
needReadable: true,
emittedReadable: false,
readableListening: false,
resumeScheduled: false,
defaultEncoding: 'utf8',
ranOut: false,
awaitDrain: 0,
readingMore: false,
Мне нужна помощь, чтобы получить нужный объект, и я не могу понять, что я делаю здесь неправильно.
Ниже мой код для вызова REST API:
app.get('/notes', cors(), function(req, res) {
var args = {
"hiveMachineIp": "192.168.0.110",
"hiveMachinePort": "10000",
"hiveUsername": "nt",
"hivePassword": "",
"hiveDatabaseName": "default",
"hiveTableName": "transactions_24m",
"hiveAggregationColumn": "customerid",
"hiveAggregationFunction": "HISTOGRAM",
"hiveAggregationHistogramBin": "5"
};
var Client = require('node-rest-client').Client;
var client = new Client();
client.post("http://163.47.152.170:8090/MachinfinityDataPreparation/machinfinitydataprep/hiveDataAggregation/", args, function (data, response) {
// parsed response body as js object
// console.log(data);
// raw response
console.log(response);
});
// registering remote methods
client.registerMethod("postMethod", "http://163.47.152.170:8090/MachinfinityDataPreparation/machinfinitydataprep/hiveDataAggregation/", "POST");
client.methods.postMethod(args, function (data, response) {
// parsed response body as js object
// console.log(data);
// raw response
console.log(response);
});
})
2 ответа
Вы можете использовать Axios, как это.
axios.post('/user', {
firstName: 'Fred',
lastName: 'Flintstone'
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
Внутри вашего кода вы делаете свой запрос дважды, один раз client.post
затем позвонив client.methods.postMethod
это было ранее зарегистрировано. Вы должны сделать одно или другое, и response
переменная в каждом из обратных вызовов поступает от http-клиента и не является вашим необработанным ответом json. Ваши данные уже проанализированы и они находятся в data
переменная.
Чтобы отправить один почтовый запрос на ваш сервер отдыха, вы должны использовать либо client.post
или зарегистрируйте свой метод по client.registerMethod
а потом client.methods.registeredMethodName
отправить запрос.
Когда вам нужно отправить один и тот же запрос на публикацию в коде несколько раз, определите функцию, которая будет обрабатывать ответ на этот запрос, например:
function handleResponseA(data, response) {
if(response.statusCode == 200){
console.log(data);
} else {
switch(response.statusCode){
case 404:
console.log("Page not found.");
break;
case 500:
console.log("Internal server error.");
break;
default:
console.log("Response status code: " + response.statusCode);
}
}
}
А потом для client.post
:
client.post("http://163.47.152.170:8090/MachinfinityDataPreparation/machinfinitydataprep/hiveDataAggregation/", args, handleResponseA);
client.post("http://163.47.152.170:8090/MachinfinityDataPreparation/machinfinitydataprep/hiveDataAggregation/", args, handleResponseA);
И чтобы сделать это зарегистрированным методом, зарегистрируйте метод:
client.registerMethod("postMethod", "http://163.47.152.170:8090/MachinfinityDataPreparation/machinfinitydataprep/hiveDataAggregation/", "POST");
И затем вызовите зарегистрированный метод:
client.methods.postMethod(args, handleResponseA);
client.methods.postMethod(args, handleResponseA);