Попытка отправки данных с помощью запроса NPM из NodeJS на локальный хост (Loopback Swagger API) - PullRequest
0 голосов
/ 05 февраля 2019

Когда я пытаюсь отправить экземпляр в loopback из nodejs с помощью этого кода, я не получаю никаких ошибок, но я также не публикую никаких данных?

//NPM Package (request)
var request = require('request'); 

// Address of Loopback API on the same server
var api = "http://localhost:3000/api/devices"; 

//JSON Construction
var deviceInstance = {
     "manufacturer": "manufacturer",
     "model": "model"
   //etc
}

// NPM (request)
request({
   url: api,
   method: "POST",
   headers: {"Accept: application/json"},
   json: true,
   body: deviceInstance
}, function (error, response, body) {
      if(error) {
        console.log('error: '+ error);
      } else {
        console.log('document saved to api')
        console.log(body);
        console.log(response);
      }
});

process.exit();

Я не получаюлюбой ответ или ошибки с сервера, который находится на той же машине.Если я попробую тот же вызов в почтальоне (приложение для Windows), он фактически создаст экземпляр в API, так почему мой локальный узел не подключается к API?

Ответы [ 3 ]

0 голосов
/ 08 февраля 2019

Почему process.exit () ?

Вызов process.exit () заставит процесс завершиться как можно быстрее, даже если все еще ожидают асинхронные операции.

0 голосов
/ 11 февраля 2019

Что происходит и почему

Вы наблюдаете поведение из-за асинхронной природы Javascript.

Ваш код сверхуВниз запускает запрос POST, а затем вызывает process.exit() до выполнения запроса, что дает поведение, которое вы видите, и «ломает» ваш код.

Оттуда у вас естьдва решения:

Вызов process.exit () при обратном вызове запроса

//NPM Package (request)
var request = require('request'); 

// Address of Loopback API on the same server
var api = "http://localhost:3000/api/devices"; 

//JSON Construction
var deviceInstance = {
     "manufacturer": "manufacturer",
     "model": "model"
   //etc
}

// NPM (request)
request({
   url: api,
   method: "POST",
   headers: {"Accept: application/json"},
   json: true,
   body: deviceInstance
}, function (error, response, body) {
      if(error) {
        console.log('error: '+ error);
      } else {
        console.log('document saved to api')
        console.log(body);
        console.log(response);
      }
      //request is done, we can safely exit
      process.exit();
});

Вызов функции exit() при обратном вызове вашего request будет эффективно гарантировать, чтоЗапрос POST выполнен, и вы можете безопасно выйти из него.

Удаление process.exit () в целом

Факт в том, что вам не нужно было выходить вручную: любой процесс Node завершается сам по себе, как только цикл обработки событий пуст.Другими словами, если для процесса не запланировано дальнейшее задание, узел самостоятельно завершает процесс.

Более подробную информацию об этом можно найти в официальной документации: https://nodejs.org/api/process.html#process_event_exit

0 голосов
/ 06 февраля 2019

request требуется обратный вызов:

request({
  url: api + "Devices",
  method: "POST",
  headers: "Accept: application/json",
  json: true,
  body: JSONParent
}, (err, result, body) => {
  // do your stuffs with the results
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...