сделать почтовый запрос с телом в nodejs - PullRequest
0 голосов
/ 04 июля 2019

Я использую nodeJS для связи с API. Для этого я использую почтовый запрос.

В моем коде я использую данные формы для передачи переменных, но я получаю ошибку 400. Когда я пытаюсь вместо этого поместить тело, я получаю сообщение о том, что мои переменные не определены.

Это API: https://developer.hpe.com/api/simplivity/endpoint?&path=%2Fdatastores

Мой запрос:

async function postCreateDatastore(url, username, password, name, clusterID, policyID, size, token) {
    console.log (name, clusterID, policyID, size)
    var options = {
        method: 'POST',
        url: url + '/datastores',
        headers: {
            'Content-Type': 'application/vnd.simplivity.v1.1+json',
            'Authorization': 'Bearer ' + token,
        },
        formdata:
        {
            name: name,
            omnistack_cluster_id: clusterID,
            policy_id: policyID,
            size: size,
        }
    };
    return new Promise(function (resolve, reject) {
        request(options, function (error, response, body) {
            if (response.statusCode === 415) {
                console.log(body);
                resolve(body);
            } else {
                console.log("passed");
                console.log(JSON.parse(body));
                resolve(response.statusCode);
            }
        });
    });
}

ответ:

testsimon20K 4a298cf0-ff06-431a-9c86-d8f9947ba0ba ea860974-9152-4884-a607-861222b8da4d 20000
passed
{ exception:
   'org.springframework.http.converter.HttpMessageNotReadableException',
  path: '/api/datastores',
  message:
   'Required request body is missing: public org.springframework.http.ResponseEntity<java.lang.Object> com.simplivity.restapi.v1.controller.DatastoreController.createDatastore(javax.servlet.http.HttpServletRequest,com.simplivity.restapi.v1.mo.actions.CreateDatastoreMO) throws org.apache.thrift.TException,org.springframework.web.HttpMediaTypeNotSupportedException,com.simplivity.restapi.exceptions.ObjectNotFoundException,java.text.ParseException,java.io.IOException,com.simplivity.util.exceptions.ThriftConnectorException,com.simplivity.common.exceptions.DataSourceException',
  timestamp: '2019-07-04T08:51:49Z',
  status: '400' }

спасибо за вашу помощь!

1 Ответ

0 голосов
/ 04 июля 2019

Я советую использовать node-fetch для публикации ваших данных.Этот пакет позволяет использовать функцию выборки по умолчанию из ES6.

Вот ваш ответ:

//require the node-fetch function
const fetch = require('node-fetch');

async function postCreateDatastore(url, username, password, name, clusterID, policyID, size, token) {
    console.log(name, clusterID, policyID, size);
    
    try {
      const response = await fetch(`${url}/datastores`, {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
          'Authorization': 'Bearer ' + token,
        },
        body: JSON.stringify({
          name,
          omnistack_cluster_id: clusterID,
          policy_id: policyID,
          size
        })
      });
    
      const json = await response.json();
    
      console.log(json);

      return json;
    }
    catch(e) {
      throw e;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...