POST-запрос JSON-сервера не работает по Axios - PullRequest
0 голосов
/ 07 апреля 2019

Здравствуйте, я использую этот json-сервер. https://github.com/typicode/json-server Я могу публиковать данные в postmman, и он хорошо работает, например, объект

{  
   "mainTab":{  
      "m_actual":0,
      "m_refresh":2000,
      "m_actual":0,
      "m_refresh":4000
     } 
  }

с заголовком Content-Type: application/json На моем сервере работает http://35.195.249.40:3004/users

И все в порядке

Но в моем приложении в nativescript / vue я не могу сделать пост-запрос - он дает 304 ответа

updateJsonData(){
            const data = {

                m_actualHP: 0,
                m_refreshHP: 2000,
                m_actualMP: 666666,
                m_refreshMP: 4000,

            }

        axios.post('http://35.195.249.40:3004/users', data, {
                headers:  { 
                    'Accept': 'application/json',
                    'Content-Type': 'application/json'

                     }
                }
             )
            .then(function (response) {
                console.log(response);

            })
            .catch(function (error) {
                console.log(error);
            }); 

     }, 

Iпопытался с запросом выборки тоже, и это ответ 'анализ не удался:' [Ошибка типа: Ошибка сетевого запроса: java.io.IOException: HTTP-трафик в незашифрованном виде не разрешен]

 updateJsonData(){ 
        fetch('http://35.195.249.40:3004/users', {
            method: 'post',
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json'
            },
            body: JSON.stringify({
                "title":   "Add a blogpost about Angular2",
                "dueDate": "2015-05-23T18:25:43.511Z",
                "done": false
            })
            }).then(function(response) {
                return response.json()
                }).then(function(json) {
                console.log('parsed json: ', json)
                }).catch(function(ex) {
                console.log('parsing failed: ', ex)
                });

    },  

Ответы [ 2 ]

0 голосов
/ 07 апреля 2019

эти предоставленные axios.post предоставляют этот код в ответ

    { data: '',
JS:   status: null,
JS:   statusText: '',
JS:   headers: {},
JS:   config:
JS:    { adapter: { [Function: xhrAdapter] [length]: 1, [name]: 'xhrAdapter', [prototype]: [Object] },
JS:      transformRequest: { '0': [Object] },
JS:      transformResponse: { '0': [Object] },
JS:      timeout: 0,
JS:      xsrfCookieName: 'XSRF-TOKEN',
JS:      xsrfHeaderName: 'X-XSRF-TOKEN',
JS:      maxContentLength: -1,
JS:      validateStatus: { [Function: validateStatus] [length]: 1, [name]: 'validateStatus', [prototype]: [Object] },
JS:      headers:
JS:       { Accept: 'application/json',
JS:         'Content-Type': 'application/json' },
JS:      method: 'post',
JS:      url: 'http://35.195.249.40:3004/users',
JS:      data: '{"data":{"mainTab":{"m_actualHP":0,"m_refreshHP":2000,"m_actualMP":666666,"m_refreshMP":4000}}}' },
JS:   request:
JS:    { UNSENT: 0,
JS:      OPENED: 1,
JS:      HEADERS_RECEIVED: 2,
JS:      LOADING: 3,
JS:      DONE: 4,
JS:      _responseType: '',
JS:      textTypes:
JS:       [ 'text/plain',
JS:         'application/xml',
JS:         'application/rss+xml',
JS:         'text/html',
JS:         'text/xml',
JS: ...
JS: 'CONSOLE LOG END | CONSOLE DIR STARTS'
JS: ==== object dump start ====
JS: data: ""
JS: status: "null"
JS: statusText: ""
JS: headers: {}
JS: config: {
JS:   "transformRequest": {},
JS:   "transformResponse": {},
JS:   "timeout": 0,
JS:   "xsrfCookieName": "XSRF-TOKEN",
JS:   "xsrfHeaderName": "X-XSRF-TOKEN",
JS:   "maxContentLength": -1,
JS:   "headers": {
JS:     "Accept": "application/json",
JS:     "Content-Type": "application/json"
JS:   },
JS:   "method": "post",
JS:   "url": "http://35.195.249.40:3004/users",
JS:   "data": "{\"data\":{\"mainTab\":{\"m_actualHP\":0,\"m_refreshHP\":2000,\"m_actualMP\":666666,\"m_refreshMP\":4000}}}"
JS: }
JS: request: {
JS:   "UNSENT": 0,
JS:   "OPENED": 1,
JS:   "HEADERS_RECEIVED": 2,
JS:   "LOADING": 3,
JS:   "DONE": 4,
JS:   "_responseType": "",
JS:   "textTypes": [
JS:     "text/plain",
JS:     "application/xml",
JS:     "application/rss+xml",
JS:     "text/html",
JS:     "text/xml"
JS:   ],
JS:   "_listeners": {},
JS:   "_readyState": 4,
JS:   "_options": {
JS:     "url": "http://35.195.249.40:3004/users",
JS:     "method": "POST",
JS:     "headers": {
JS:       "Accept": "application/json",
JS:       "Content-Type": "application/json"
JS:     },
JS:     "content": "{\"data\":...

Я понял, что axios не будет работать с http.Это нужно https.Есть ли возможность заставить его работать без https?

, другим решением может быть запуск сервера json с https.Я использую этот сервер, так что я делаю, я запускаю npm в Ubuntu, и сервер запускается https://github.com/halfzebra/json-server-example

там написано на github, чтобы использовать https://github.com/typicode/hotel это для обеспечения https, но он работает на localhost.Мне нужно запустить его по глобальному IP через https

0 голосов
/ 07 апреля 2019

В примере объекта Postman вы указали

{  
   "mainTab": {  
      "m_actual":0,
      "m_refresh":2000,
      "m_actual":0,
      "m_refresh":4000
     } 
  }

Поля встроены в объект, доступный с помощью клавиши mainTab.Однако в ваших реальных примерах кода вы предоставляете объекту нужные поля (например, m_refresh) напрямую, а не встроенным способом.

Итак, я предлагаю обернуть объект, содержащий данные, чтобы сделатьотправка вызова выглядит следующим образом:

axios.post('http://35.195.249.40:3004/users', { mainTab: data },
  {
    headers:  { 
      'Accept': 'application/json',
      'Content-Type': 'application/json'
    }
  }
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...