Вызов 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);
Другие вопросы по тегам